是否可以捕获python try块中引发的所有警告?

时间:2019-04-03 06:44:45

标签: python exception logging warnings

我有一些类似以下代码的代码:

from logging import warning

def complex_function():
    # Do some stuff
    raise Warning("blah") 
    # Do some more stuff
    raise Warning("Blah again") 

try: 
    complex_function()
except Warning as e: 
    warning(e) 

结果是:

WARNING:root:blah

我想捕获所有提出的警告,并将其记录下来。在我的代码中,此类警告有时来自第三方库,因此修改警告以使用logging.warning是不切实际的,并且我还想存储警告信息以便可以返回该警告的某些版本。通过API获取信息。

我有办法做这样的事情来捕获所有警告并循环遍历它们吗?

编辑

为时已晚,我意识到我在上面的示例中提出了错误的警告,complex_function应该距离以下行很长:

def complex_function():
    # Do some stuff
    warnings.warn("blah") 
    # Do some more stuff
    warnings.warn("Blah again", UnknownWarningType)

我想我可以用warnings.catch_warnings

1 个答案:

答案 0 :(得分:2)

您是否期望以下内容:

import warnings
warnings.filterwarnings('error')


def warning_func():
    print('hello')
    warnings.warn(Warning('Warn1'))
    print('hi')
    warnings.warn(Warning('Warn2'))


with warnings.catch_warnings(record=True) as w:
    warnings.simplefilter("always")
    warning_func()
    print(w)