我正在处理使用警告库抛出大量(对我来说)无用警告的代码。阅读(/扫描)文档时,我只找到了禁用单个函数警告的方法。但我不想更改这么多代码。

是否有类似python的标志-没有警告foo.py?

你会推荐什么?


当前回答


忽略警告的更像蟒蛇的方式


由于“warning.filterwarnings()”未抑制所有警告,我建议您使用以下方法:

import logging
    
for name in logging.Logger.manager.loggerDict.keys():
    logging.getLogger(name).setLevel(logging.CRITICAL)

#rest of the code starts here...

OR,

如果希望仅抑制一组特定的警告,则可以按如下方式进行过滤:

import logging
    
for name in logging.Logger.manager.loggerDict.keys():
    if ('boto' in name) or ('urllib3' in name) or ('s3transfer' in name) or ('boto3' in name) or ('botocore' in name) or ('nose' in name):
            logging.getLogger(name).setLevel(logging.CRITICAL)

#rest of the code starts here...

其他回答

有-W选项。

python -W ignore foo.py

您还可以定义一个环境变量(2010年的新功能,即python 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')
>>> 

有关弃用警告,请查看如何忽略python中的弃用警告

复制到此处。。。

从警告模块的文档中:

 #!/usr/bin/env python -W ignore::DeprecationWarning

如果您在Windows上:pass-W ignore::DeprecationWarning作为Python的参数。不过,最好通过向int转换来解决问题。

(注意,在Python 3.2中,默认情况下会忽略弃用警告。)

Or:

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings("ignore", category=DeprecationWarning)
    import md5, sha

yourcode()

现在,您仍然会收到所有其他DeprecationWarnings,但不会收到以下原因导致的警告:

import md5, sha

我意识到这只适用于特定的情况,但在numpy上下文中,我非常喜欢使用np.errstate:

np.sqrt(-1)
__main__:1: RuntimeWarning: invalid value encountered in sqrt
nan

但是,使用np.errstate:

with np.errstate(invalid='ignore'):
    np.sqrt(-1)
nan

最好的一点是,您只能将其应用于非常特定的代码行。

如果你不想要复杂的东西,那么:

import warnings
warnings.filterwarnings("ignore", category=FutureWarning)

不要让它变得复杂,只需使用这两行

import warnings
warnings.filterwarnings('ignore')