如何禁用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)只是解释了使用重新指导和升级模块/依赖的结果。