variable local de Python a la que se hace referencia antes de la asignación

Funciones y métodos de Python

Cuando comienzas a introducir funciones en tu código, es probable que encuentres un UnboundLocalError en algún momento. Este error se genera cuando intenta utilizar una variable antes de que se haya asignado en el contexto local .

En esta guía, hablamos sobre qué significa este error y por qué se plantea. Analizamos un ejemplo de este error en acción para ayudarlo a comprender cómo puede resolverlo.

¿Qué es UnboundLocalError: ¿variable local referenciada antes de la asignación?

Intentar asignar un valor a una variable que no tiene alcance local puede resultar en este error:

 UnboundLocalError: variable local referenciada antes de la asignación 

Python tiene una regla simple para determinar el alcance de una variable. Si se asigna una variable en una función , esa variable es local. Esto se debe a que se asume que cuando define una variable dentro de una función, solo necesita acceder a ella dentro de esa función.

Hay dos ámbitos de variable en Python: local y global. Las variables globales son accesibles a través de un programa completo; solo se puede acceder a las variables locales dentro de la función en la que se definieron originalmente.

Veamos cómo solucionar este error.

Un ejemplo de escenario

Vamos a escribir un programa que calcule la calificación que un estudiante ha obtenido en clase.

Comenzamos declarando dos Variables:

El 81% de los participantes afirmaron que se sentían más seguros sobre sus perspectivas laborales en tecnología después de asistir a un bootcamp. Asóciese a un bootcamp hoy.

El graduado promedio de bootcamp pasó menos de seis meses en la transición de carrera, desde comenzar un bootcamp hasta encontrar su primer trabajo.

Estas variables almacenan los valores numéricos y calificaciones con letras que un estudiante ha obtenido, respectivamente. De forma predeterminada, el valor de & ldquo; letra & rdquo; es & ldquo; F & rdquo ;. A continuación, escribimos una función que calcula la calificación con letras de un estudiante en función de su calificación numérica utilizando un & ldquo; if & rdquo; declaración :

 def calculate_grade (grado): si grado & gt; 80: letra = "A" elif grade & gt; 70: letra = "B" elif grado & gt; 60: letra = "C" elif grado & gt; 50: letter = "D" return letter 

Finalmente, llamamos a nuestra función:

 print (calculate_grade (numérico)) 

Esta línea de código imprime el valor devuelto por la función calculate_grade () en la consola. Pasamos a través de un parámetro a nuestra función: numérico. Este es el valor numérico de la calificación que ha obtenido un estudiante.


Ejecutemos nuestro código y veamos qué sucede:

 Traceback (última llamada más reciente): Archivo "main.py", línea 15, en & lt; módulo & gt; print (calculate_grade (numérico)) Archivo "main.py", línea 13, en la letra de retorno de calculate_grade UnboundLocalError: variable local Se hace referencia a la 'letra' antes de la asignación 

Se ha generado un error.

La solución

Nuestro código devuelve un error porque hacemos referencia a & ldquo; letra & rdquo; antes de asignarla.

Hemos establecido el valor de & ldquo; numérico & rdquo; en 42. Nuestra declaración if no establezca un valor para cualquier calificación superior a 50. Esto significa que cuando llamamos a nuestra función calculate_grade () , nuestra declaración de retorno no conoce el valor al que nos referimos.

lo hacemos definir & ldquo; letra & rdquo; al inicio de nuestro programa. Sin embargo, lo definimos en el contexto global. Python trata & ldquo; return letter & rdquo; como intentar devolver una variable local llamada & ldquo; letra & rdquo ;, no una variable global.

Resolvemos este problema de dos maneras. Primero, podemos agregar una instrucción else a nuestro código. Esto asegura que declaramos & ldquo; letter & rdquo; antes de intentar devolverlo:

 def calculate_grade (grado): if grade & gt; 80: letra = "A" elif grade & gt; 70: letra = "B" elif grado & gt; 60: letra = "C" elif grado & gt; 50: letter = "D" else: letter = "F" return letter 

Intentemos ejecutar nuestro código nuevamente:

 F 

Nuestro código imprime correctamente la calificación del estudiante.

Si está utilizando un & ldquo; si & rdquo; declaración en la que declara una variable, debe asegurarse de que haya un & ldquo; else & rdquo; declaración en su lugar. Esto asegurará que, incluso si ninguna de sus declaraciones if se evalúa como Verdadero, aún puede establecer un valor para la variable con la que va a trabajar.

Alternativamente, podríamos usar el & ldquo; global & rdquo; palabra clave para que nuestra palabra clave global esté disponible en el contexto local en nuestra función calculate_grade () . Sin embargo, es probable que este enfoque dé lugar a un código más confuso y a otros problemas. En general, las variables no deben declararse usando & ldquo; global & rdquo; a menos que sea absolutamente necesario . Su primer puerto de escala, y el principal, siempre debe ser asegurarse de que una variable esté definida correctamente.


En el ejemplo anterior, por ejemplo, no verificamos que la variable & ldquo; letra & rdquo; estuviera definida en todos los casos de uso.

¡Eso es todo! Hemos corregido el error de la variable local en nuestro código.

Conclusión

El UnboundLocalError: variable local referenciada antes de que se genere un error de asignación cuando intentas asignar un valor a una variable local antes de que se haya declarado. Puede resolver este error asegurándose de que se declare una variable local antes de asignarle un valor.

Ahora está listo para resolver UnboundLocalError Python errores como un desarrollador profesional !





variable local de Python a la que se hace referencia antes de la asignación: StackOverflow Questions

Tutorials