NameError: name 'a' is not defined
Explication. La variable référencée dans le code n'existe pas : Python a beau consulter sa mémoire, aucune variable de ce nom n'existe.
-
Si vous venez d'ouvrir un carnet Jupyter, il est peut-être nécessaire d'exécuter certaines cellules du carnet avant d'en arriver au calcul qui provoque l'erreur. (Il n'est pas exclu que lors de la création du carnet, la cellule définissant la variable (a) ait été insérée par erreur plus bas que celle du calcul provoquant l'erreur. Il n'est pas non plus exclu que la cellule ayant défini la variable ait été retirée par erreur.)
-
Il est possible que vous exécutiez une cellule de code donnant l'impression de définir la variable (a) mais qu'elle soit en fait inopérante. Par exemple, si l'affectation est soumise à une condition que vous pensez vraie à tort :
if b < 0:
a = 3.1415
L'indentation en block est importante en Python : elle marque d'un point de vue syntaxique les relations de dépendance des diverses instructions. Dans l'exemple suivant
if b < 0
if a < 0:
c = a * b
l'instruction c = a * b
est subordonné au deuxième if
, qui lui-même dépend du premier.
IndentationError: expected an indented block
IndentationError: unexpected indent
Il est possible d'accéder à un élément d'une liste via L[i]
. Mais si L
n'est pas une liste ou un dictionnaire par exemple, les crochets (subscript le fait de passer un indice) n'ont pas de sens et leur utilisation fautive produit une erreur telle que
TypeError: 'int' object is not subscriptable
Le message d'erreur peut aussi parler d'autres objets comme les nombres à virgule :
'float' object is not subscriptable
, etc.
Si une liste contient 100 éléments, on ne peut ni consulter ni affecter une valeur à l'élément 312. L'indice est en dehors des valeurs possibles.
IndexError: list index out of range
IndexError: list assignment index out of range
Pour un tableau NumPy, le même principe s'applique mais les messages d'erreur sont un peu différents
IndexError: index 3 is out of bounds for axis 0 with size 3
Les entiers de Python peuvent en principe être aussi grands que l'on veut (mais la mémoire et le temps de calcul vont tout de même imposer des limites à ce qu'il est possible de faire). Ce n'est pas le cas des nombres à virgule flottante qui ne peuvent dépasser des nombres de l'ordre de
OverflowError: (34, 'Numerical result out of range')
RuntimeWarning: overflow encountered in exp