如何摆脱警告"弃用警告生成器' ngrams'提出StopIteration"

时间:2017-04-25 17:33:41

标签: python ipython nltk kaggle

在使用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

3 个答案:

答案 0 :(得分:12)

致任何不想要或无法抑制警告的人。

这种情况正在发生,因为ngrams正在引发StopIteration异常以结束生成器,并且这已从Python 3.5中弃用。

您可以通过更改生成器停止的代码来消除警告,因此您只需使用Python的关键字StopIteration而不是提出return

更多信息:PEP 479

答案 1 :(得分:0)

如果只想使所有警告静音,则可以执行以下操作:

import warnings

warnings.filterwarnings('ignore')

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

答案 2 :(得分:0)

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

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

然后(根据您的示例):

data = get_data(ngrams(tokens, 3))

应该可以解决问题