【发布时间】:2019-08-24 14:25:42
【问题描述】:
我有一些代码大致如下:
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
我想捕获所有引发的警告,并将它们记录下来。在我的代码中,此类警告有时来自 3rd 方库,因此修改警告以使用 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 捕捉这些
【问题讨论】:
-
我认为 try catch 会在第一个警告/错误时中断。你可能想看看这篇文章:stackoverflow.com/questions/5644836/…
-
我猜你可以
yield警告代替。 -
警告不是要中断执行流程吗?如果不是,你不应该养它们。您可以将列表作为参数传递以填充警告,或返回警告列表。
-
你说得对,@PeterWood,我忘记了加注和跟注
warnings.warn之间的区别。我添加了一个澄清,我将关闭这个问题。对不起,大雁追逐,感谢您的帮助。
标签: python exception logging warnings