我正在处理使用警告库抛出大量(对我来说)无用警告的代码。阅读(/扫描)文档时,我只找到了禁用单个函数警告的方法。但我不想更改这么多代码。
是否有类似python的标志-没有警告foo.py?
你会推荐什么?
我正在处理使用警告库抛出大量(对我来说)无用警告的代码。阅读(/扫描)文档时,我只找到了禁用单个函数警告的方法。但我不想更改这么多代码。
是否有类似python的标志-没有警告foo.py?
你会推荐什么?
当前回答
查看Python文档的“临时抑制警告”部分:
如果您使用的代码已知会引发警告,例如已弃用的函数,但不希望看到警告,则可以使用catch_warnings上下文管理器抑制警告:导入警告def fxn():warnings.warn(“已弃用”,弃用警告)带有警告。catch_warnings():warnings.simplefilter(“忽略”)fxn()
我不宽恕它,但你可以这样压制所有警告:
import warnings
warnings.filterwarnings("ignore")
Ex:
>>> import warnings
>>> def f():
... print('before')
... warnings.warn('you are warned!')
... print('after')
...
>>> f()
before
<stdin>:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
其他回答
import sys
if not sys.warnoptions:
import warnings
warnings.simplefilter("ignore")
在处理文件或添加新功能以重新启用警告时,将忽略更改为默认值。
我意识到这只适用于特定的情况,但在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
最好的一点是,您只能将其应用于非常特定的代码行。
这是一个老问题,但PEP 565中有一些新的指导,如果您正在编写python应用程序,请关闭所有警告:
import sys
import warnings
if not sys.warnoptions:
warnings.simplefilter("ignore")
建议这样做的原因是,它默认关闭所有警告,但关键是允许通过命令行上的python-W或PYTHONWARNINGS重新打开警告。
如果你知道你通常会遇到哪些无用的警告,你可以通过消息过滤它们。
import warnings
#ignore by message
warnings.filterwarnings("ignore", message="divide by zero encountered in divide")
##part of the message is also okay
warnings.filterwarnings("ignore", message="divide by zero encountered")
warnings.filterwarnings("ignore", message="invalid value encountered")
不要让它变得复杂,只需使用这两行
import warnings
warnings.filterwarnings('ignore')