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...')

Need Your Help

How to test your code on a machine with big-endian architecture?

c++ c architecture solaris endianness

Both ideone.com and codepad.org have Little-Endian architechtures.

facebook graph API endpoint for getting "likes, shares, comments" for post(s)

facebook facebook-graph-api

Facebook is planning to drop support for FQL after V2.0 https://developers.facebook.com/docs/apps/changelog/#v2_0_fql