在 Python 中,如何将警告视为异常?
我在 python 代码中使用的第三方库(用 C 编写)发出警告。我希望能够使用 try
except
语法来正确处理这些警告。有办法做到这一点吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我在 python 代码中使用的第三方库(用 C 编写)发出警告。我希望能够使用 try
except
语法来正确处理这些警告。有办法做到这一点吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
要将警告作为错误处理,只需使用以下命令:
在此之后,您将能够捕获与错误相同的警告,例如,这将起作用:
您还可以通过运行来重置警告的行为:
PS 添加了此答案,因为注释中的最佳答案包含拼写错误:
filterwarnings
而不是filterwarnings
。To handle warnings as errors simply use this:
After this you will be able to catch warnings same as errors, e.g. this will work:
You can also reset the behaviour of warnings by running:
P.S. Added this answer because the best answer in comments contains misspelling:
filterwarnigns
instead offilterwarnings
.引用Python手册(27.6.4.测试警告):
To quote from the python handbook (27.6.4. Testing Warnings):
如果您只是希望脚本在警告时失败,您可以使用 python rel="noreferrer">
-W
参数:If you just want your script to fail on warnings you can invoke
python
with the-W
argument:这是一个变体,可以让您更清楚地了解如何仅使用自定义警告。
Here's a variation that makes it clearer how to work with only your custom warnings.
扩展 niekas 答案,但使用
catch_warnings
上下文管理器将警告行为重置为默认值上下文退出:Expanding on niekas answer, but using the
catch_warnings
context manager that resets the warnings behavior to default after context exit:捕获所有警告可能会出现问题。您可以捕获特定的警告。例如,我需要捕获枕头警告:
Catching all warnings can be problematic. You can catch specific warnings. For example, I needed to catch a Pillow warning:
在某些情况下,您需要使用 ctypes 将警告转换为错误。例如:
In some cases, you need use ctypes to turn warnings into errors. For example:
为了完整起见,您还可以导出环境变量:
Just for completeness, you can also export an env variable: