variable locale Python référencée avant l’affectation

Lorsque vous commencez à introduire des fonctions dans votre code, vous êtes obligé de rencontrer une UnboundLocalError à un moment donné. Cette erreur est générée lorsque vous essayez d’utiliser une variable avant qu’elle n’ait été affectée dans le contexte local.

Dans ce guide, nous expliquons ce que signifie cette erreur et pourquoi elle est générée. Nous passons en revue un exemple de cette erreur en action pour vous aider à comprendre comment vous pouvez la résoudre.

Qu’est-ce que UnboundLocalError : variable locale référencée avant l’affectation ?

Essayer d’affecter une valeur à une variable qui n’a pas de portée locale peut entraaîner cette erreur :

Python a une règle simple pour déterminer la portée d’une variable. Si une variable est affectée dans une fonction, cette variable est locale. En effet, il est supposé que lorsque vous définissez une variable à l’intérieur d’une fonction, vous n’avez besoin d’y accéder qu’à l’intérieur de cette fonction.

Il existe deux portées de variable en Python : local et global. Les variables globales sont accessibles dans tout un programme ; les variables locales ne sont accessibles que dans la fonction dans laquelle elles sont définies à l’origine.

Regardons comment résoudre cette erreur.

Un exemple de scénario

Nous allons écrire un programme qui calcule la note qu’un élève a obtenu en classe.

Nous commençons par déclarer deux variables :

81 % des participants ont déclaré qu’ils se sentaient plus confiants quant à leurs perspectives d’emploi en technologie après avoir assisté à un bootcamp. Soyez jumelé à un bootcamp aujourd’hui.

Le diplômé moyen d’un bootcamp a passé moins de six mois en transition de carrière, du démarrage d’un bootcamp à la recherche de son premier emploi.

Ces variables stockent les données numériques et notes par lettre qu’un étudiant a obtenues, respectivement. Par défaut, la valeur de "lettre‚" est "F". Ensuite, nous écrivons une fonction qui calcule la note en lettres d’un étudiant en fonction de sa note numérique à l’aide d’un "if‚" déclaration :

Enfin, nous appelons notre fonction :

Cette ligne de code imprime la valeur renvoyée par la fonction calculate_grade() à la console. Nous passons par un paramètre dans notre fonction : numérique. Il s’agit de la valeur numérique de la note qu’un élève a obtenue.

Exécutons notre code et voyons ce qui se passe :

Une erreur s’est produite.

La Solution

Notre code renvoie une erreur car nous référençons "lettre" avant de l’affecter.

Nous avons défini la valeur de "numérique" à 42. Notre instruction if ne définissez une valeur pour toute note supérieure à 50. Cela signifie que lorsque nous appelons notre fonction calculate_grade(), notre instruction return ne connaaît pas la valeur à laquelle nous nous référons.

Nous faisons définir "lettre" au début de notre programme. Cependant, nous le définissons dans le contexte global. Python traite la "lettre de retour" en essayant de renvoyer une variable locale appelée "lettre‚", pas une variable globale.

Nous résolvons ce problème de deux manières. Tout d’abord, nous pouvons ajouter une instruction else à notre code. Cela garantit que nous déclarons "lettre" avant d’essayer de le renvoyer :

Essayons d’exécuter à nouveau notre code :

Notre code imprime avec succès la note de l’élève.

Si vous utilisez un "si" dans laquelle vous déclarez une variable, vous devez vous assurer qu’il y a un "else‚" déclaration en place. Cela garantira que même si aucune de vos instructions if n’est évaluée à True, vous pouvez toujours définir une valeur pour la variable avec laquelle vous allez travailler.

Alternativement, nous pourrions utiliser le paramètre "global‚" mot-clé pour rendre notre mot-clé global disponible dans le contexte local dans notre fonction calculate_grade(). Cependant, cette approche est susceptible de conduire à un code plus confus et à d’autres problèmes. En général, les variables ne doivent pas être déclarées à l’aide de "global‚" sauf si absolument nécessaire. Votre première et principale escale doit toujours être de vous assurer qu’une variable est correctement définie.

Dans l’exemple ci-dessus, par exemple, nous n’avons pas vérifié que la variable "lettre" était définie dans tous les cas d’utilisation.

C’est tout ! Nous avons corrigé l’erreur de variable locale dans notre code.

Conclusion

The UnboundLocalError : la variable locale référencée avant l’erreur d’affectation est déclenchée lorsque vous essayez d’affecter un valeur à une variable locale avant qu’elle ne soit déclarée. Vous pouvez résoudre cette erreur en vous assurant qu’une variable locale est déclarée avant de lui affecter une valeur.

Vous êtes maintenant prêt à résoudre UnboundLocalError Python erreurs comme un développeur professionnel !

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method