我正在使用代码使用warnings
库引发大量(对于我来说)无用的警告。阅读(/扫描)文档我只找到一种方法to disable warnings for single functions。但我不想改变这么多的代码。如何禁用python警告
有没有像python -no-warning foo.py
这样的旗子?
你会推荐什么?
我正在使用代码使用warnings
库引发大量(对于我来说)无用的警告。阅读(/扫描)文档我只找到一种方法to disable warnings for single functions。但我不想改变这么多的代码。如何禁用python警告
有没有像python -no-warning foo.py
这样的旗子?
你会推荐什么?
还有-W option。
python -W ignore foo.py
你看看python文档的suppress warnings部分?
如果您使用的是您知道会提出一个警告,如过时的功能代码,但不希望看到警告,则有可能使用catch_warnings上下文管理器相应的警告:
import warnings
def fxn():
warnings.warn("deprecated", DeprecationWarning)
with warnings.catch_warnings():
warnings.simplefilter("ignore")
fxn()
我不纵容它,但你可以很surpress这一切警告:
import warnings
warnings.filterwarnings("ignore")
例如:
>>> import warnings
>>> def f():
... print('before')
... warnings.warn('you are warned!')
... print('after')
>>> f()
before
__main__:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
你也可以定义一个环境变量(新功能在2010年 - 即蟒蛇2.7)
export PYTHONWARNINGS="ignore"
测试是这样的:默认
$ export PYTHONWARNINGS="default"
$ python
>>> import warnings
>>> warnings.warn('my warning')
__main__:1: UserWarning: my warning
>>>
忽略警告
$ export PYTHONWARNINGS="ignore"
$ python
>>> import warnings
>>> warnings.warn('my warning')
>>>
FWIW“2010年新功能”意味着这适用于Python 2.7,但不适用于2.6或更高版本的2.x版本。 (我必须去查看它,我仍然在生产Python 2.6 ...) –
没错。 Python添加了2.7点 –
这在执行测试时忽略警告特别有用。使用'tox',在'setenv'中添加'PYTHONWARNINGS = ignore'使得输出变得不那么脏。 –
警告通过stderr输出,简单的解决方案是将'2>/dev/null'追加到CLI。这对许多用户来说很有意义,例如那些使用Python 2.6依赖关系的centos 6(比如yum),并且各种模块都被推到了覆盖范围内的灭绝边缘。
对于涉及SNI等的密码学尤其如此。可以使用proc更新2.6 for HTTPS处理: https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2
警告仍然存在,但是您希望的所有内容都可以回移。 stderr的重定向将为您提供干净的终端/ shell输出,尽管stdout内容本身不会改变。
回应FriendFX。第一句(1)以一种通用的解决方案直接回应问题。第二句(2)考虑了引用的锚重新“禁用警告”,这是python 2.6特有的,并指出RHEL/centos 6用户不能直接使用2.6。虽然没有引用特定的警告,但是第二部分(2)回答了我经常在加密模块中遇到的2.6问题,以及如何能够“现代化”(即升级,回溯,修复)python的HTTPS/TLS性能。第三部分(3)仅仅解释了使用重新指导和升级模块/依赖的结果。
感谢您花时间回答。尽管如此,请务必严格按照主题回答:您提到了很多与当前问题无关的问题,例如CentOS,Python 2.6,密码学,urllib,back-porting。您可以编辑您的问题以删除这些位。如果您想了解OP的更多细节,请在该问题下留下评论。 – FriendFX
这是一个老问题,但在PEP 565一些较新的指导意见,为如果你正在写一个Python应用程序关闭所有的警告,你应该使用:
import sys
import warnings
if not sys.warnoptions:
warnings.simplefilter("ignore")
此建议的原因是,它在默认情况下会关闭所有警告,但重要的是允许它们通过命令行上的python -W
或PYTHONWARNINGS
重新打开。
为什么要禁用警告?短期+长期不能解决/解决它们会更好吗?警告通常会出于某种原因而提出,忽略/消除它们可能会在未来导致更大的问题。 –
你是完全正确的,我给了你一个+1的评论,但正如我写的“此刻”对我毫无用处。 – Framester
@MartinSamson我普遍同意,但有合理的理由忽视警告。我从defusedxml中使用有效的Xpath语法得到了其中的一些:'FutureWarning:此搜索在1.3和更早的版本中被破解,并且将在未来版本中修复。如果你依赖目前的行为,把它改成[这个其他的东西]'。我宁愿忽略现在的警告,等待它被默默地修复,而不是编写不必要的难看的代码,以避免无害的警告。 – Pedro