Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么这个去润滑警告会停止代码执行?_Python_Scikit Learn_Feature Extraction - Fatal编程技术网

Python 为什么这个去润滑警告会停止代码执行?

Python 为什么这个去润滑警告会停止代码执行?,python,scikit-learn,feature-extraction,Python,Scikit Learn,Feature Extraction,我尝试使用Sci工具包学习包中的TfidifVectorizer和CountVectorizer,但在导入它们时: 从sklearn.feature\u extraction.text导入TfidfVectorizer、CountVectorizer 我收到以下警告信息: /anaconda3/lib/python3.7/site packages/sklearn/feature_extraction/text.py:17:不推荐使用或从“collections”而不是从“collections

我尝试使用Sci工具包学习包中的TfidifVectorizer和CountVectorizer,但在导入它们时: 从sklearn.feature\u extraction.text导入TfidfVectorizer、CountVectorizer

我收到以下警告信息:

/anaconda3/lib/python3.7/site packages/sklearn/feature_extraction/text.py:17:不推荐使用或从“collections”而不是从“collections.abc”导入abc是不推荐的,在3.8中它将停止工作 从集合导入映射,defaultdict

我的代码在此之后停止运行,即使该消息只是一个警告,指示即使没有报告错误也会出现错误。我想这就是我问起这个警告的真正原因,因为这是我必须离开的一切。
这是SKLearn的bug吗?自从Python3.7更新以来,开发人员落后了吗?对于我是否应该报告这一点,或者如何使用anaconda恢复到Python3.6来解决这一问题,我将不胜感激。谢谢大家!

此弃用警告不太可能引起问题。默认情况下,所有警告仅打印一条消息,然后继续。警告可以被视为异常,但您会看到stacktrace而不是警告文本。弃用警告是针对开发人员的,用于通知他们,他们的库将在将来的python版本中中断。它们不是为最终用户设计的,因为代码仍然可以很好地工作。例如,根据集合导入映射中的警告,defaultdict在您的Python3.7版本中仍然有效,但在Python3.8中不会

因此,这一警告不太可能是问题的根源。您之所以看到它,是因为sklearn更改了默认警告过滤器,以便it用户可以看到sklearn发出的弃用警告。 警告不会更改执行流,除非将其设置为错误。 要验证警告不是问题所在,可以尝试在此线束中运行程序。这相当骇人,但需要停止sklearn覆盖默认警告过滤器。通过使用警告过滤器的值,您应该能够看到弃用警告不是问题的根源

import warnings
from warnings import (
    filterwarnings as original_filterwarnings, 
    simplefilter as original_simplefilter
)

def ignore_filterwarnings(*args, **kwargs):
    pass

def ignore_simplefilter(*args, **kwargs):
    pass

warnings.filterwarnings = ignore_filterwarnings
warnings.simplefilter = ignore_simplefilter

# no imports of sklearn should occur before the previous two lines (otherwise sklearn
# will get to use the original functions).

with warnings.catch_warnings():
    original_simplefilter("ignore")  # or "error" to see the difference

    from my_main_module import main
    main()

谢谢你的回复。我认为我需要进一步研究我正在使用的代码。当我在我的个人计算机上对数据样本运行它时,我得到了所需的输出。然而,当我在远程计算机上运行它时,我使用的是一个较大的数据集,我得到了去润滑警告,然后程序关闭,没有说明原因。我加上了“shebang”/usr/bin/env python-W ignore::DeprecationWarning'查看是否可以发现任何其他内容。我一定会尝试你的代码,看看我是否能捕捉到任何东西。你可能有版本不匹配。它看起来像是弃用警告,所以如果您在一台机器上看到它,而不是在另一台机器上看到它,那么可以安全地假设机器具有不同的设置。您可能应该调查本地计算机和远程计算机的版本有何不同。我的个人计算机有python 3.6,因此我认为可能需要在另一台计算机上回滚python版本或更新我的软件包。但我肯定会调查此事。非常感谢您的帮助。您使用的是哪个版本的sklearn?