Search code examples
pythonpython-3.xexceptiontraceback

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?


Solution

  • 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.