[英]Exception TypeError warning sometimes shown, sometimes not when using throw method of generator
[英]TypeError when chaining exception from a warning
我正在尝试通过应用warnings.simplefilter
的'error'
过滤器来捕获作为错误提出的warnings.simplefilter
。 下面给出一个最小的工作示例:
>>> 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。
您正在尝试使用traceback对象作为例外:
raise ValueError from sys.exc_info()[2]
sys.exc_info()
返回(ExceptionType, exception_instance, traceback)
的元组; 您需要在此处创建索引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
,请参见“ 异常层次”部分 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.