try:
import MySQLdb
# some action
except ImportError as err:
# fallback code
PyCharm gives a code inspection warning on that:
'MySQLdb' in try block with 'except ImportError' should also be defined in except block
This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-level and class-level items are supported better than instance items.
Ok, I thought the warning is reasonable, because the fallback code
assumes that 'MySQLdb' is not installed, while it could be some different error that just raised ImportError. So I used something like:
try:
import MySQLdb
# some action
except ImportError as err:
if "MySQLdb" in repr(err):
# fallback code
else:
raise
The PyCharm alert is still exists, but It could be just a PyCharm issue (google shows issues with such inspections)
Questions:
Is it really worth checking for name when you "except ImportError"? Even in simple cases (no
some action
afterimport MySQLdb
)?If it worth checking, Is the above example the right way to do it? If no - what is the right way?
P.S. MySQLdb is just an example of a module that could be absent in the system.