Scikit-learn: warnings.filterwarnings——请不要这样做。 这是不好的行为。

创建于 2018-08-10  ·  3评论  ·  资料来源: scikit-learn/scikit-learn

# Make sure that DeprecationWarning within this package always gets printed
warnings.filterwarnings('always', category=DeprecationWarning,
module=r'^{0}\.'.format(re.escape(__name__)))

通过__init__.py

这确实是非常糟糕的行为。 如果你觉得你真的必须这样做,请使用append=True

最有用的评论

您能否详细说明为什么sklearn会覆盖自定义警告配置?

如果添加append=True ,则不会覆盖未自定义的警告配置。

问题是我的应用程序全局状态不应受到导入包的影响。 我也不希望你做改变我的日志配置之类的事情。

所有3条评论

您能否详细说明这对您的应用程序来说是什么问题? 从评论来看,它听起来应该只影响 scikit-learn 中的DeprecationWarnings

(另见https://github.com/scikit-learn/scikit-learn/pull/6930中的相关讨论)

您能否详细说明为什么sklearn会覆盖自定义警告配置?

如果添加append=True ,则不会覆盖未自定义的警告配置。

问题是我的应用程序全局状态不应受到导入包的影响。 我也不希望你做改变我的日志配置之类的事情。

如果添加 append=True,则不会覆盖未自定义的警告配置。

尝试过,通过从源代码安装 sklearn,并在sklearn.utils.__init__.py手动提出弃用。 使用默认配置,它在调用python -c "import sklearn.utils"时按预期发出警告。 如果我们将append=Truewarnings.filterwarnings使用的sklearn/__init__.py ,则不再引发DeprecationWarning 。 我没有调查原因。

我同意目前的情况很糟糕,我只是想知道您在使用此设置时遇到了什么样的实际问题(除了原则上很糟糕的事实之外)。 对用例有很好的理解,也将帮助我们提出正确的解决方案。 这个问题在https://github.com/scikit-learn/scikit-learn/issues/9857 (特别参见 https://github.com/scikit-learn/scikit-learn/issues/9857#issuecomment- 333351913 和 https://github.com/scikit-learn/scikit-learn/issues/9857#issuecomment-333359072)概述了当前情况的原因。

将其作为https://github.com/scikit-learn/scikit-learn/issues/9857的副本结束(以避免在多个问题上进行相同的讨论)。 非常欢迎您在那里发表评论或提出解决方案。

此页面是否有帮助?
0 / 5 - 0 等级