"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi Python renvoie-t-il une UnboundLocalError ?

Pourquoi Python renvoie-t-il une UnboundLocalError ?

Publié le 2024-12-23
Parcourir:710

Why Does Python Throw an UnboundLocalError?

Comment se produit UnboundLocalError : noms non liés et liaison de variables en Python

En Python, la liaison de variable détermine la portée et la durée de vie des variables. Lorsqu’aucune valeur n’est attribuée à un nom, il est considéré comme non lié. Cela peut conduire à l'exception UnboundLocalError.

Comprendre les variables locales non liées

Contrairement aux langages avec des déclarations explicites, Python permet l'affectation de variables n'importe où dans un bloc. Cependant, si un nom dans une fonction est utilisé avant son attribution, une UnboundLocalError est levée. Cela se produit car le compilateur ne peut pas déterminer la valeur de la variable puisqu'elle n'a pas encore été liée.

Exemple : Code qui provoque UnboundLocalError

Considérez le code suivant :

def foo():
    if False:
        spam = 'eggs'
    print(spam)

foo()

Ce code génère une UnboundLocalError car la variable spam est utilisée dans l'instruction d'impression sans avoir été affectée au préalable. Même si l'instruction if vérifie une condition, elle n'exécute pas l'affectation, laissant le spam non lié.

Opérations de liaison en Python

Les variables sont liées via diverses opérations :

  • Assignation
  • pour l'itération de boucle
  • Paramètres de fonction
  • Importer déclarations
  • Exceptions capturées (sauf clause)
  • Gestionnaires de contexte (avec instruction)

Lorsqu'un nom est lié à une portée, telle qu'une fonction, il devient une variable locale. Cependant, l'utilisation de l'instruction globale (ou nonlocale dans Python 3) déclare explicitement un nom comme global, ce qui permet de le référencer et de le modifier depuis l'extérieur de la portée.

Prévention d'UnboundLocalError

Pour éviter UnboundLocalError, assurez-vous que les variables sont correctement liées avant d'être utilisées. Cela peut être fait en :

  • En attribuant des valeurs aux variables avant de les utiliser.
  • En utilisant l'instruction globale pour déclarer des variables globales dans les fonctions.
  • Éviter les blocs de code inaccessibles. .

Références :

  • [Documentation de référence Python - Dénomination et liaison](https://docs.python.org/3/reference/introduction.html#naming-and-binding)
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3