如何禁用python警告

我正在用代码抛出很多(对我来说)使用warnings库的无用的warnings 。 阅读(/扫描)文档我只find一种方法来禁用单个函数的警告 。 但我不想改变这么多的代码。

是否有像python -no-warning foo.py这样的标志?

你会推荐什么?

有-W选项 。

python -W ignore foo.py

你看了python文档的压制警告部分?

如果您使用的代码会引发警告(比如不推荐使用的函数),但不希望看到警告,则可以使用catch_warnings上下文pipe理器来禁止警告:

 import warnings def fxn(): warnings.warn("deprecated", DeprecationWarning) with warnings.catch_warnings(): warnings.simplefilter("ignore") fxn() 

我不会宽恕它,但是你可以用这个来压制所有的警告:

 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 

你也可以定义一个环境variables(2010年的新function – 即Python 2.7)

 export PYTHONWARNINGS="ignore" 

像这样testing: 默认

 $ 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') >>> 

警告通过stderr输出,简单的解决scheme是在CLI中附加'2> / dev / null'。 这对许多用户来说是很有意义的,比如那些使用Python 2.6依赖关系的centos 6(比如yum),而且各种模块都被推到了覆盖面的灭绝边缘。

涉及SNI等的密码学尤其如此。 可以使用proc来更新2.6的HTTPS处理: https : //urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2

警告仍然存在,但是你想要的东西都会被移回。 虽然stdout内容本身不会改变,但stderr的redirect将使您获得干净的terminal/ shell输出。

回应FriendFX。 第一句(1)用一个通用的解决scheme直接回应这个问题。 第二句(2)考虑了引用的锚重新“禁用警告”,这是python 2.6特定的,并注意到RHEL / centos 6用户不能直接使用2.6。 尽pipe没有引用具体的警告,但是第二部分(2)回答了我经常在密码模块中遇到的问题,以及如何能够“升级”,“升级”,“回溯”和“修复”python的HTTPS / TLS性能。 第三(3)只是解释了使用重新指导和升级模块/依赖的结果。