我正试图通过应用warnings.simplefilter
的'error'
筛选器来捕获作为错误引发的警告。下面给出了一个最小的工作示例:
>>> import warnings
>>> warnings.simplefilter('error')
>>> try:
... warnings.warn('test')
... except UserWarning:
... raise ValueError
...
ValueError:
这很好,但如果我想将其链接起来,以便包含来自警告的回溯,我会得到以下TypeError
:
>>> import sys
>>> try:
... warnings.warn('test')
... except UserWarning:
... raise ValueError from sys.exc_info()[2]
...
TypeError: exception causes must derive from BaseException
看起来,即使我正在提升一个从BaseException
派生的类(即ValueError
),来自UserWarning
的回溯的信息似乎在诱使Python认为我仍在提升UserWarning
。
这是预期的行为吗?如果是,是否有一个好的解决方法?
我使用的是Python 3.4.3。
您正试图使用回溯对象作为异常:
raise ValueError from sys.exc_info()[2]
CCD_ 8返回一个CCD_;这里需要索引1(记住Python计算0
的索引!):
raise ValueError from sys.exc_info()[1]
更好的是,直接在变量中捕获异常实例:
try:
warnings.warn('test')
except UserWarning as warning:
raise ValueError from warning
这样就不必计算元组索引了。
将警告筛选器设置为'error'
时,异常是Warning
异常类的子类,该类继承自Exception
,请参阅异常层次结构部分。