How can I more easily suppress previous exceptions when I raise my own exception in response?
Consider
try: import someProprietaryModule except ImportError: raise ImportError('It appears that <someProprietaryModule> is not installed...')
When run, if someProprietaryModule is not installed, one sees:
(traceback data) ImportError: unknown module: someProprietaryModule During handling of the above exception, another exception occurred: (traceback data) ImportError: It appears that <someProprietaryModule> is not installed...
Perhaps I don't want the "During handling of the above exception..." line (and the lines above it) to appear. I could do this:
_moduleInstalled = True try: import someProprietaryModule except ImportError: _moduleInstalled = False if not _moduleInstalled: raise ImportError('It appears that <someProprietaryModule> is not installed...')
But that feels like a bit of a hack. What else might I do?
Answers
In Python 3.3 and later raise ... from None may be used in this situation.
try: import someProprietaryModule except ImportError: raise ImportError('It appears that <someProprietaryModule> is not installed...') from None
This has the desired results.
This can be done like this in Python 2.7 and Python 3:
try: import someProprietaryModule except ImportError as e: raised_error = e if isinstance(raised_error, ImportError): raise ImportError('It appears that <someProprietaryModule> is not installed...')