模块覆盖筛选器列表时筛选警告

时间:2016-10-12 08:21:26

标签: python-3.x warnings arch

我使用ARCH package在每月的每一天为数千个传感器的数据拟合GARCH模型。我知道所有数据都不干净,而且某些传感器的模型可能不会收敛,我对此感到满意。我打算稍后在每个传感器的基础上处理它们。

我的问题是Python处理警告的方式。根据{{​​3}}:

  

从概念上讲,警告过滤器维护过滤器的有序列表   规格;任何特定警告都与每个过滤器匹配   依次列出规则,直到找到匹配为止;比赛   确定比赛的处置。

这基本上意味着

warnings.simplefilter('ignore')

将附加到列表的头部。

但是,在Warnings documentation中,在ARCH package中,/arch/base.py读取:

warnings.simplefilter('always')
每次调用ARCH的模型拟合方法时,

实际上将'always'附加到警告的开头。这样可以确保始终显示警告,因为我只能在拨打'ignore'之前或之后将.fit()添加到列表的开头(在'always'中会被{{1}}覆盖由于我的问题涉及数千个传感器,因此会打印数千个警告,这会使Jupyter笔记本电脑变慢。

有没有办法在所有条件下忽略警告?就像警告的超级过滤器一样棒。

1 个答案:

答案 0 :(得分:2)

他们每次都重置过滤器,所以我没有看到任何其他解决方案而不是劫持warn函数。

导入Python模块时,它会存储在字典sys.modules中供以后使用。因此,在ARCH包之前导入warnings模块就足够了:

import warnings
warnings.warn = lambda *a, **kw: False

# do stuff which might trigger warnings

这是一个丑陋的解决方案,我承认。但作为一个快速黑客,它应该服务于它的目的。

作为一个长期解决方案,我建议你打开公关并解释你的情况。简单地在函数中添加一个参数来决定是否发出警告对我来说似乎是一个好主意。