如何摆脱警告 "DeprecationWarning generator 'ngrams' raised StopIteration"

How to get rid of warning "DeprecationWarning generator 'ngrams' raised StopIteration"

在使用 Kaggle 笔记本时,我 运行 遇到了一个问题。以下代码块:

from nltk import ngrams
def grams(tokens):
    return list(ngrams(tokens, 3))
negative_grams = preprocessed_negative_tweets.apply(grams)

导致出现一个红色方框,上面写着

/opt/conda/bin/ipython:5: DeprecationWarning: generator 'ngrams' raised StopIteration

变量preprocessed_negative_tweets是一个包含标记的Pandas数据框。

有人知道如何解决这个问题吗?

(完整笔记本可用 here

对于任何其他不想或不能抑制警告的人。

发生这种情况是因为 ngrams 正在引发 StopIteration 结束生成器的异常,并且这已从 Python 3.5.

中弃用

您可以通过更改生成器停止处的代码来消除警告,因此您只需使用 Python 的关键字 return.[=15 而不是引发 StopIteration =]

更多信息:PEP 479

如果你只想消除所有警告,你可以这样做:

import warnings

warnings.filterwarnings('ignore')

我们应该听取这些警告...

您可以使用这样的包装器:

def get_data(gen):
    try:
        for elem in gen:
            yield elem
    except (RuntimeError, StopIteration):
        return

然后(根据您的示例):

data = get_data(ngrams(tokens, 3))

应该可以解决问题