1

我在每月的每一天使用ARCH 包对来自数千个传感器的数据拟合 GARCH 模型。我知道所有数据都不是干净的,对于某些传感器,模型可能不会收敛,我可以接受。我计划稍后在每个传感器的基础上处理它们。

我的问题是 Python 处理警告的方式。根据警告文档

从概念上讲,警告过滤器维护过滤器规范的有序列表;任何特定警告都会依次与列表中的每个过滤器规范匹配,直到找到匹配项;匹配决定了匹配的处置。

这基本上意味着

warnings.simplefilter('ignore')

将附加到列表的头部。

但是,在ARCH 包/arch/base.py中,第 507 行显示:

warnings.simplefilter('always')

本质上'always',每次调用 ARCH 的模型拟合方法时,它都会附加到警告过滤器的开头。这样可以确保始终显示警告,因为我只能'ignore'在调用之前或之后添加到列表的头部(这将在下一次调用中.fit()被覆盖。由于我的问题涉及数千个传感器,它会打印数千个'always'使 Jupyter 笔记本缓慢爬行的警告。

有没有办法在所有情况下都忽略警告?像警告的超级过滤器会很棒。

4

1 回答 1

2

他们每次都在重置过滤器,所以除了劫持该warn功能之外,我没有看到任何其他解决方案。

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

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

# do stuff which might trigger warnings

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


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

于 2016-10-12T08:56:31.383 回答