Pourquoi Python génère-t-il une « UnboundLocalError » et comment puis-je y remédier ?

Mary-Kate Olsen
Libérer: 2024-11-25 07:37:21
original
977 Les gens l'ont consulté

Why Does Python Throw an

Erreur : "UnboundLocalError : variable locale référencée avant affectation" en Python

Lorsque vous rencontrez cette erreur, c'est parce que vous essayez de accéder à une variable locale avant qu'elle ne soit initialisée ou définie. Explorons le code à l'origine de ce problème :

Var1 = 1
Var2 = 0

def function():
    if Var2 == 0 and Var1 > 0:
        print("Result 1")
    elif Var2 == 1 and Var1 > 0:
        print("Result 2")
    elif Var1 < 1:
        print("Result 3")
    Var1 -= 1

function()
Copier après la connexion

Ce code définit deux variables, Var1 et Var2, en dehors de la fonction function(). Au sein de la fonction, nous essayons de manipuler Var1, ce qui est très bien. Cependant, le problème survient lorsque nous accédons à Var1 sans l'initialiser dans le cadre de la fonction.

Solution utilisant des variables globales :

Pour résoudre ce problème, nous pouvons déclarer Var1 comme une variable globale dans la fonction. Cela indique à Python d'utiliser le Var1 défini en dehors de la fonction au lieu de créer une nouvelle variable locale à l'intérieur. Pour y parvenir, ajoutez la ligne suivante au début de la fonction :

global Var1
Copier après la connexion

Solution alternative : utiliser des variables non locales :

Python 3 introduit l'instruction non locale, qui vous permet de modifier une variable définie dans une portée englobante. Au lieu de déclarer Var1 comme variable globale, nous pouvons utiliser le code suivant dans la fonction :

nonlocal Var1
Var1 -= 1
Copier après la connexion

Conclusion :

UnboundLocalError se produit lorsque vous essayez de référencer un variable locale qui n'a pas été initialisée ou définie. Pour résoudre ce problème, vous pouvez soit déclarer la variable comme globale, soit utiliser le mot-clé nonlocal pour accéder à la variable définie dans une portée englobante.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal