![](/img/trans.png)
[英]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.