Maison >développement back-end >Tutoriel Python >Pourquoi Python renvoie-t-il une UnboundLocalError ?

Pourquoi Python renvoie-t-il une UnboundLocalError ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-05 21:23:11241parcourir

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'impression déclaration sans avoir été assignée au préalable. Même si l'instruction if vérifie une condition, elle n'exécute pas la mission, laissant le spam non lié.

Opérations de liaison en Python

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

  • Assignation
  • pour itération de boucle
  • Fonction paramètres
  • Déclarations d'importation
  • Exceptions capturées (sauf clause)
  • Gestionnaires de contexte (avec instruction)

Lorsqu'un nom est lié dans une portée , comme une fonction, elle 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évenir UnboundLocalError

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

  • Attribuer des valeurs aux variables avant de les utiliser.
  • Utiliser l'instruction globale pour déclarer des variables globales dans les fonctions.
  • Éviter le code inaccessible blocs.

Références :

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

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