Arreglar NameError: la variable no está definida en Python

Zeeshan Afridi 21 junio 2023
  1. Alcance de las variables en Python
  2. el NameError en Python
  3. Solucione el Error de nombre: la variable no está definida en Python
Arreglar NameError: la variable no está definida en Python

Este artículo discutirá las causas de NameError en Python y cómo solucionar el error particular NameError: la variable no está definida.

Alcance de las variables en Python

El alcance de las variables implementa restricciones de accesibilidad en las variables a las que se puede acceder desde un bloque específico o no. El tiempo de vida de algunas variables se encuentra dentro de un bloque en particular, mientras que a otras se puede acceder a través del programa.

Entendámoslo a través de un ejemplo:

# global scope
a = 3

# Function to add two numbers


def displayScope():

    # local varaible
    b = 2
    # sum a and b
    c = a + b

    print("The sum of a & b = ", c)


displayScope()

Producción :

The sum of a & b =  5

En este ejemplo, la variable a se define en la parte superior y no está encerrada en ningún bloque, por lo que es accesible en todo el programa. Pero la variable b se define localmente dentro del bloque de funciones; por lo tanto, no es accesible fuera del bloque.

el NameError en Python

En Python, el NameError ocurre en tiempo de ejecución durante la ejecución de una variable, biblioteca, función o una cadena sin las comillas simples o dobles, que son tipos en el código sin ninguna declaración. En segundo lugar, cuando llamas a las funciones o variables cuyo alcance es local y no se puede acceder globalmente, el intérprete de Python arroja el NameError y dice que el nombre 'nombre' no está definido.

Causas del NameError en Python

La causa del NameError es la llamada a una función, variable o biblioteca no válida. Para entender claramente la razón, pongamos un ejemplo:

# invalid funciton call
def test_ftn():
    return "Test function"


print(test_ft())  # calling the the function which does not exist

# printing invalid varaible
name = "Zeeshan Afridi"
print(Name)  # printing variable `Name` which does not exist

Ambas son las causas de NameError en Python porque, en el primer ejemplo, llamamos a una función no disponible. El nombre de la función es test_ftn, mientras que llamamos a la función test_ft.

En el segundo ejemplo, la variable nombre está asignada a la cadena Zeeshan Afridi, pero estamos imprimiendo Nombre, que ni siquiera está declarado en el programa. Por eso obtuvimos el NameError: el nombre 'test_ft' no está definido.

Solucione el Error de nombre: la variable no está definida en Python

En los ejemplos anteriores, obtuvimos el NameError porque llamamos a una variable fuera del alcance. Veamos cómo podemos arreglar este NameError: la variable no está definida.

# global scope
a = 3

# Function to add two numbers


def displayScope():

    # local varaible
    b = 2


print("The value of a = ", a)
print("The value of b = ", b)

Producción :

The value of a =  3
NameError: name 'b' is not defined

El código anterior ha mostrado el valor de a porque es accesible en todo el programa. Por otro lado, la variable b está definida localmente, por lo que solo la conoce la función displayScope(); no se puede acceder fuera del alcance.

Esto ha provocado el error NameError: el nombre 'b' no está definido.

Afortunadamente, Python ha introducido la palabra clave de reserva global para solucionar este problema. Esta palabra clave de reserva global se usa para aumentar el alcance de una variable local para que se pueda acceder a la variable en todo el programa globalmente.

Entendámoslo a través de un ejemplo:

# global scope
a = 3

# Function to add two numbers


def displayScope():

    # local scope
    global c
    z = 2
    c = a + b


print("The value of c =", c)

Producción :

The value of c = 5

En este ejemplo, la variable c se define dentro del alcance local de displayScope(), pero podemos acceder a ella globalmente gracias a la palabra clave mágica global. Ahora, c es accesible en todas partes porque se define como global.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

Artículo relacionado - Python Error