How to get rid of warning “DeprecationWarning gene

2019-01-27 20:08发布

While working on a Kaggle notebook I ran into an issue. The following code block:

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

resulted in a red box appearing saying

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

The variable preprocessed_negative_tweets is a Pandas data frame containing tokens.

Anyone know how to make this go away?

(Full notebook available here)

3条回答
冷血范
2楼-- · 2019-01-27 20:41

If you just want to quiet all warnings, you can do:

import warnings

warnings.filterwarnings('ignore')

We should listen to these warnings...

查看更多
闹够了就滚
3楼-- · 2019-01-27 20:56

To anyone else who doesn't want or can't suppress the warning.

This is happening because ngrams is raising StopIteration exception to end a generator, and this is deprecated from Python 3.5.

You could get rid of the warning by changing the code where the generator stops, so instead of raising StopIteration you just use Python's keyword return.

More on: PEP 479

查看更多
孤傲高冷的网名
4楼-- · 2019-01-27 20:56

You can use a wrapper like this one:

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

and then (according to your example):

data = get_data(ngrams(tokens, 3))

should do the trick

查看更多
登录 后发表回答