Error de referencia de Python

Error de referencia de Python
Los programas de Python consisten en muchos errores y excepciones, y algunos de ellos están integrados. Estos errores y excepciones ocurren cada vez que el intérprete de Python encuentra errores. Un programador no es inmune a los errores al escribir un programa de Python y es probable que encuentre errores no controlados. Cuando intentamos abrir un archivo que no existe o dividir un número por cero, se lanza una excepción. Siempre que ocurran este tipo de errores, Python crea los objetos de excepción. Si no se manejan correctamente, Python imprime un rastreo de ese error. Este artículo es sobre una de las excepciones en Python que se llama error de referencia.

Error de referencia

En Python, muchos errores y excepciones se clasifican en dos grupos principales: errores de sintaxis y errores lógicos. Los errores lógicos también se conocen como excepciones. Se producen excepciones cuando se activan las operaciones incorrectas o ilegales. Un error de referencia se encuentra en la categoría de errores lógicos. Los errores lógicos son aquellos que ocurren en el tiempo de ejecución del código. Cuando se emplea un proxy de referencia débil para acceder a un referente que se recopila de la memoria, se activa un error de referencia. Un error de referencia es parte de las excepciones incorporadas de Python. Estas excepciones se lanzan después del error que ocurre.

En Python, un programa tiene 4 funciones: L, M, N y O. Si usamos un programa en el que la función L llama a la función m, la función m llamadas function n, que a su vez llama la función o. Ahora, supongamos que hay una excepción que ocurre en la función n pero que no se resuelve ni se maneja. La excepción se pasa a la función m y luego a la función l. Si el error no se resuelve, se produce un error y el programa puede fallar.

Ahora, discutamos un ejemplo de un error de referencia.

Ejemplo 1:

En este ejemplo, utilizamos una función incorporada en Python para referirnos a un objeto. Mira el código en detalle. Primero, importamos los módulos y creamos una clase llamada "check_object" en la que se pasa el objeto. Aquí, usamos la función def_init_ (self, nombre) y luego definimos "yo.nombre ”como el nombre. Ahora, ejecute el siguiente código en su sistema:

importar gc como g
importar débil como wk
clase check_object (objeto):
def __init __ (self, nombre):
ser.nombre = nombre
def __del __ (self):
imprimir ('Eliminar it % s') % self
print ('Object de referencia =', un.nombre)

El resultado que obtenemos ejecutando el código anterior se da en la siguiente ilustración. Puede ver que obtenemos un error de referencia que establece que el objeto débilmente referenciado ya no existe.

Aquí, podemos ver eso pidiendo imprimir un objeto de referencia sin una definición de objeto adecuada, obtenemos un error de referencia.

El módulo de referencia débil permite que un programador de Python forme las referencias débiles a los objetos. Una referencia débil a un objeto no es suficiente para mantener el objeto a flote y es la única referencia restante al referente. Estos referentes son referencias débiles o colecciones de basura que pueden ser destruidas por el referente y la memoria que la liberación se puede usar para otra cosa.

Ejemplo 2:

Tomemos otro ejemplo para comprender mejor este error. Como discutimos anteriormente, cuando cualquier objeto se hace referencia débilmente en el código, se produce un error de referencia. Usando el siguiente código, ahora intentamos imprimir los objetos antes y después de usar el comando Eliminar.

Aquí, usamos una función incorporada en Python para referirnos a un objeto y llamarlo "OBJ1". Se crea una clase llamada "check_object". Aquí, definimos dos funciones: "_init" y "_del_" - para realizar las funciones separadas.

Después de eso, usamos el objeto creado de la clase en el comando proxy que es wk.proxy (obj_check). Para imprimir después de la declaración, el "obj_check" creado está configurado en ninguno.

importar gc como g
importar débil como wk
clase check_object (objeto):
def __init __ (self, nombre):
ser.nombre = nombre
def __del __ (self):
imprimir ('Eliminar it % s') % self
obj_check = check_object ('objeto')
ABC = WK.proxy (obj_check)
imprimir ('antes de eliminar =', ABC.nombre)
obj_check = ninguno
imprimir ('después de eliminar =', ABC.nombre)

Cuando ejecutamos el código anterior, obtenemos la siguiente salida:

Como puede ver, cuando ejecutamos el código, recibimos un error de referencia porque antes de eliminar el objeto, Python ignora la excepción en la función y causa un error porque los operandos eran de un tipo diferente y no lo admitían.

Para resumir por qué ocurre el error de referencia, podemos decir que cuando elimina un objeto de un programa, se produce un error de referencia que hace que todas las referencias al objeto se eliminen. La forma más común en que ocurre este error es si su programa tiene Clase 1 y Clase 2, y digamos que se elimina la Clase 2, nos queda solo Clase 1 sin vinculación a la Clase 2. La relación entre las clases 1 y 2 permanece, pero no hay referencia a la clase 2 porque se ha eliminado o devuelto de nuevo. El error puede ser causado por la configuración errónea de las raíces de origen y el programa que está utilizando es posible que no sepa dónde encontrar el enlace.

Cómo resolver errores de referencia en Python?

Los errores de referencia se pueden resolver utilizando una instrucción if-else o una declaración de prueba sin prueba. Podemos ver el código para resolver el error de referencia en el siguiente ejemplo.

Ejemplo 3:

En este ejemplo, demostramos el código que se puede usar para resolver un error de referencia en un programa. Este código no muestra ninguna salida. Simplemente contiene algunos puntos que puede seguir en sus programas para evitar los errores de referencia.

def test_proxy_ref (self):
a = c ()
a.barra = 1
Ref = débilref.proxy (a, yo.llamar de vuelta)
Del A
Def Check (proxy):
apoderado.bar
extra_collect ()
ser.ASERTRAISES (débillefref.ReferenceError, cheque, ref)
Si test_support.IS_JYTHON:
ser.ASERTRAISES (débillefref.ReferenceError, bool, ref)
demás:
ser.ASERTRAISES (débillefref.ReferenceError, bool, weakref.proxy (c ()))
ser.afirmar_ (yo mismo.cbcalled == 2)

La primera función que usamos es def test_proxy_ref (self) que se utiliza para definir una referencia de proxy de prueba a Self. Luego definimos que la variable a = c () y un.barra = 1.

Ahora, usamos la sintaxis de referencia "Referencia débil.proxy (a, yo.devolución de llamada) ”para volver a llamar a la referencia que se mencionó. Esta función de devolución de llamada garantiza que todas las referencias se invaliden antes de que se llamen a las devoluciones de llamada. Es importante que la primera referencia se vuelva a llamar o en términos simples. La referencia más reciente se limpia primero antes de que se llame a la segunda referencia. Esta es una prueba que invalida todas las referencias antes de que se realicen cualquier devolución de llamada, por lo que solo hay una mención de la función "_weakref". Para verificar el proxy, usamos la verificación de funciones (proxy): proxy.bar. La función de recolección adicional se usa para patear el programa Python en el dispositivo y ayuda con las devoluciones de llamada que el hilo debe llamar.

La función if-else en python ahora se usa. Esta función se crea para verificar la frase de prueba y ejecutar la instrucción "si" en un caso en que la condición es verdadera. De lo contrario, se ejecuta la declaración "más".

Conclusión

En esta publicación, aprendimos que se produce un error de referencia debido a la referencia de poder débil. Muchas veces, puede ocurrir un error en un programa, ya sea un error de sintaxis o un error lógico. Un error de referencia se encuentra en la categoría de error lógico. Explicamos en qué casos se produce un error de referencia a través de un ejemplo. Pruebe estos ejemplos en su sistema para comprender mejor el tema de los errores de referencia.