78 votes

NameError : le nom 'List' n'est pas défini

Je ne sais vraiment pas pourquoi cela ne fonctionne pas. Voici la partie importante du code (elle provient d'un challenge leetcode). La première ligne lance le NameError.

def totalFruit(self, tree: List[int]) -> int:
    pass

Si j'essaie d'importer List Je reçois d'abord une erreur No module named 'List' . J'utilise Python 3.7.3 d'Anaconda.

156voto

LaundroMat Points 1824

Pour être en mesure d'annoter les types que votre liste doit accepter, vous devez utiliser la fonction typing.List

from typing import List

Vous avez aussi importé List ?

Mise à jour

Si vous utilisez Python > 3.9, voir la réponse de @Adam.Er8

42voto

Adam.Er8 Points 10581

Desde Python 3.9 vous pouvez utiliser des types de collection intégrés (tels que list ) en tant que types génériques, au lieu d'importer les types correspondants en majuscules à partir de typing .
Ceci grâce à PEP 585

Ainsi, dans Python 3.9 ou plus récent, vous pouvez écrire :

def totalFruit(self, tree: list[int]) -> int: # Note list instead of List
    pass

sans avoir à importer quoi que ce soit.

10voto

Itamar Mushkin Points 1441

Pour pouvoir spécifier une liste de chaînes de caractères dans une indication de type, vous pouvez utiliser la fonction typing et from typing import List (en majuscules, à ne pas confondre avec l'élément incorporé list )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X