web-dev-qa-db-fra.com

Python 3, le module 'itertools' n'a pas d'attribut 'ifilter'

Je suis nouveau chez Python, j'essaye de construire un ancien fichier python dans Python 3. J'ai eu plusieurs erreurs de construction que j'ai résolues. Mais à ce stade, je suis obtenir au-dessus de l'erreur. Je ne sais pas comment résoudre ce problème. La section de code ressemble à ci-dessous.

return itertools.ifilter(lambda i: i.state == "IS", self.storage)
22
Sohag Mony

itertools.ifilter() a été supprimée dans Python 3 car la fonction intégrée filter() fournit désormais la même fonctionnalité.

Si vous avez besoin d'écrire du code qui peut s'exécuter dans les deux Python 2 et Python 3, utilisez les importations de future_builtins module (uniquement dans Python 2, utilisez donc un try...except ImportError: garde):

try:
    # Python 2
    from future_builtins import filter
except ImportError:
    # Python 3
    pass

return filter(lambda i: i.state == "IS", self.storage)
31
Martijn Pieters