web-dev-qa-db-fra.com

Comment se débarrasser de l'avertissement "StopIteration 'du générateur' DeprecationWarning '

Alors que je travaillais sur un cahier Kaggle, j'ai rencontré un problème. Le bloc de code suivant:

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

a abouti à une boîte rouge apparaissant en disant

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

La variable preprocessed_negative_tweets est un bloc de données Pandas contenant des jetons.

Quelqu'un sait comment faire disparaître ça?

(Cahier complet disponible ici )

8
langkilde

À toute autre personne qui ne veut pas ou ne peut pas supprimer l'avertissement.

Cela se produit parce que ngrams lève une exception StopIteration pour mettre fin à un générateur, ce qui est obsolète depuis Python 3.5.

Vous pouvez vous débarrasser de l'avertissement en modifiant le code là où le générateur s'arrête. Par conséquent, au lieu de générer StopIteration, vous n'utilisez que le mot clé Python return.

Plus sur: PEP 479

9
carla08

Si vous voulez juste faire taire tous les avertissements, vous pouvez faire:

import warnings

warnings.filterwarnings('ignore')

Nous devrions écouter ces avertissements ...

0
duhaime

Vous pouvez utiliser un wrapper comme celui-ci:

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

et ensuite (selon votre exemple):

data = get_data(ngrams(tokens, 3))

devrait faire l'affaire

0
Most Wanted