Python Unboundlocalerror

Python Unboundlocalerror

Unboundlocalerror de Python semble très déroutant lorsque les nouveaux arrivants à Python en font l'expérience pour la première fois. Cependant, c'est assez facile. Un non-linlocalerror peut se produire pour deux raisons dans Python, l'une est lorsque vous essayez d'accéder à la valeur d'une variable avant son attribution, et la seconde est lorsque Python ne fait pas la différence entre les variables globales et locales.

Cet article agira comme votre guide pour résoudre UnboundloCaLerror de Python avec des solutions possibles.

Raison 1: Accès à la variable locale avant d'attribuer une valeur

Normalement, lorsque le programmeur ne fonctionne pas dans aucune fonction ou variables de portée locales, essayant d'accéder à une variable avant de l'initialiser avec une valeur renvoie l'erreur suivante:

Cependant, lorsque la même erreur est effectuée avec des variables locales, disons à l'intérieur d'une fonction, le programme renvoie le Unboundlocalerror, ce qui signifie qu'il n'a pas pu trouver la variable locale tout en y accédant. Pour démontrer cela, le code suivant:

def func ():
Imprimer (x)
x = 420
func ()

Exécuté, il produira le résultat suivant:

Solution: fixation de l'ordre d'accès de la variable locale

Pour éviter de rencontrer cette erreur, assurez-vous simplement que vous initialisez la variable locale avec une certaine valeur avant d'essayer d'y accéder. Le code correct pour l'exemple ci-dessus est le suivant:

def func ():
x = 420
Imprimer (x)
func ()

La variable "X«On se voit une valeur avant son accession, et maintenant lorsque ce programme est exécuté, il produit le résultat suivant sur le terminal:

La sortie vérifie que vous avez réussi à corriger le non-libellocalerror causé par le mauvais ordre d'accès à la variable locale.

Raison 2: Python ne peut pas faire la différence entre les variables locales et globales

Cette raison est un peu déroutante pour la plupart des nouveaux amateurs de Python et rien n'est logiquement mauvais dans le programme. Pour démontrer cette erreur de manière non confrontée, prenons le code suivant pour accéder à une variable globale à l'intérieur d'une fonction:

x = 420
def func ():
Imprimer (x)
func ()

Ce code produit la sortie sans erreur qui est la suivante:

Mais quand une affectation est effectuée à la variable globale à l'intérieur de la fonction, telle que:

x = 420
def func ():
Imprimer (x)
x = 33
func ()

Il commence à produire le Unboundlocalerror comme indiqué ci-dessous:

La raison en est que dès qu'un changement dans la variable globale est effectué, le programme pense que l'utilisateur veut accéder et modifier une variable locale, en raison de laquelle il ne trouve pas cette variable locale et renvoie le non-libellocalerror.

Solution: utilisez le mot-clé global pour résoudre la confusion

La meilleure façon de résoudre ce problème est d'utiliser simplement le mot-clé «global» au début de la fonction pour indiquer au programme que cette variable locale est liée à la variable globale. Pour démontrer cette solution, prenez le code suivant:

x = 420
def func ():
Global X
Imprimer (x)
x = 30
func ()

Cela produira la sortie suivante sur le terminal lors de l'exécution:

Vous avez réussi les raisons du UnboundloCaLerror avec sa solution.

Conclusion

Le non-linlocalerror peut être causé en essayant d'accéder à une variable locale avant de lui attribuer une certaine valeur, ou autrement, elle peut être causée lorsque le programme ne peut pas différencier si l'utilisateur souhaite accéder à la variable locale ou à la variable globale. Ces deux raisons ont été expliquées avec leur démonstration et leur solution à fond dans ce post.