Maison >développement back-end >Tutoriel Python >Pourquoi mon code Python génère-t-il une « UnboundLocalError » lors de l'accès à une variable globale dans une fonction ?

Pourquoi mon code Python génère-t-il une « UnboundLocalError » lors de l'accès à une variable globale dans une fonction ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-23 03:35:14806parcourir

Why Does My Python Code Throw an

Erreur locale non liée : variable locale 'c' Shadowing Global Scope

En Python, comprendre les règles d'affectation des variables dans les fonctions est crucial pour prévenir les erreurs potentielles. Face à une « UnboundLocalError », il est essentiel de déterminer si une variable affectée dans une fonction tente d'éclipser une variable globale.

Considérez le code suivant :

a, b, c = (1, 2, 3)

def test():
    print(a)
    print(b)
    print(c)
    c += 1

Lors de l'exécution de ce code , vous rencontrerez une erreur provenant de la ligne "print(c)." Le message d'erreur indique généralement qu'aucune variable "c" n'est affectée dans la portée locale de la fonction test().

Pour résoudre cette erreur, vous devez comprendre que Python traite les variables dans les fonctions différemment en fonction de l'endroit où ils sont assignés. Si vous essayez d'attribuer une valeur à une variable dans une fonction, elle devient une variable locale. Cependant, dans ce code, vous avez l'intention que "c" reste global.

Pour déclarer que la variable "c" dans la fonction test() fait référence à la variable globale "c", vous devez explicitement utiliser le " global" au début de la fonction :

def test():
    global c
    print(a)
    print(b)
    print(c)
    c += 1

En ajoutant "global c", Python reconnaît que vous avez l'intention de travailler avec la variable globale "c" et non avec une variable locale. Cela vous permet d'imprimer et de modifier la variable globale "c" comme prévu.

En tant que fonctionnalité plus récente introduite dans Python 3, vous pouvez utiliser "nonlocal c" au lieu de "global c" pour faire référence à l'englobant le plus proche. portée de fonction qui possède une variable "c". Cependant, il convient de noter que l'utilisation de « nonlocal » est généralement moins courante dans le codage Python quotidien.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn