簡體   English   中英

從警告鏈接異常時發生TypeError

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM