How can I more easily suppress previous exceptions when I raise my own exception in response?

▼魔方 西西 提交于 2019-11-26 21:07:45

问题


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?


回答1:


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.




回答2:


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


来源:https://stackoverflow.com/questions/17091520/how-can-i-more-easily-suppress-previous-exceptions-when-i-raise-my-own-exception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!