当我提出自己的异常作为响应时,如何更轻松地抑制以前的异常?
Posted
技术标签:
【中文标题】当我提出自己的异常作为响应时,如何更轻松地抑制以前的异常?【英文标题】:How can I more easily suppress previous exceptions when I raise my own exception in response? 【发布时间】:2013-06-10 02:26:00 【问题描述】:考虑
try:
import someProprietaryModule
except ImportError:
raise ImportError('It appears that <someProprietaryModule> is not installed...')
运行时,如果 someProprietaryModule 没有安装,会看到:
(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...
也许我不希望出现“在处理上述异常期间...”行(以及它上面的行)。我可以这样做:
_moduleInstalled = True
try:
import someProprietaryModule
except ImportError:
_moduleInstalled = False
if not _moduleInstalled:
raise ImportError('It appears that <someProprietaryModule> is not installed...')
但这感觉有点像 hack。我还能做什么?
【问题讨论】:
这可能有助于***.com/questions/1319615/… 【参考方案1】:在 Python 3.3 及更高版本中,raise ... from None
可用于这种情况。
try:
import someProprietaryModule
except ImportError:
raise ImportError('It appears that <someProprietaryModule> is not installed...') from None
这有预期的结果。
【讨论】:
正要发布同样的内容。另请参阅PEP3134。 PEP 409 是添加了from None
语法的内容。【参考方案2】:
这可以在 Python 2.7 和 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...')
【讨论】:
【参考方案3】:你也可以试试logging
模块
import logging
try:
import someProprietaryModule
except Exception as e:
if hasattr(e, 'message'):
logging.warning('python2')
logging.error(e.message)
else:
logging.warning('python3')
logging.error('It appears that <someProprietaryModule> is not installed...')
给予
WARNING:root:python3
ERROR:root:It appears that <someProprietaryModule> is not installed...
[Program finished]
【讨论】:
以上是关于当我提出自己的异常作为响应时,如何更轻松地抑制以前的异常?的主要内容,如果未能解决你的问题,请参考以下文章
如何确定地抑制 Python 中的 DeprecationWarning?
Beats:使用 Filebeat 中的 filestream 输入更快速更轻松地读取活动日志文件