Errore di riferimento di Python

Errore di riferimento di Python
I programmi Python sono costituiti da molti errori ed eccezioni, e alcuni di essi sono incorporati. Questi errori ed eccezioni si verificano ogni volta che l'interprete di Python incontra errori. Un programmatore non è immune agli errori quando si scrive un programma Python ed è probabile che incontri errori non gestiti. Quando cerchiamo di aprire un file che non esiste o dividiamo un numero per zero, viene lanciata un'eccezione. Ogni volta che si verificano questi tipi di errori, Python crea gli oggetti di eccezione. Se non vengono gestiti correttamente, Python stampa un traceback di quell'errore. Questo articolo parla di una delle eccezioni in Python che si chiama errore di riferimento.

Errore di riferimento

In Python, molti errori ed eccezioni sono classificati in due gruppi principali: errori di sintassi ed errori logici. Gli errori logici sono anche noti come eccezioni. Si verificano eccezioni quando vengono attivate operazioni errate o illegali. Un errore di riferimento rientra nella categoria di errori logici. Gli errori logici sono quelli che si verificano al tempo di esecuzione del codice. Quando viene impiegato un proxy di riferimento debole per accedere a un referente che viene raccolto dalla memoria, viene attivato un errore di riferimento. Un errore di riferimento fa parte delle eccezioni integrate di Python. Queste eccezioni vengono lanciate seguendo l'errore che si verifica.

In Python, un programma ha 4 funzioni - L, M, N e O. Se utilizziamo un programma in quale funzione L chiama la funzione M, funzione m chiama la funzione n, che a sua volta chiama la funzione o. Ora, supponiamo che vi sia un'eccezione che si verifica nella funzione n ma che non viene risolta o gestita. L'eccezione viene passata alla funzione M e quindi alla funzione l. Se l'errore non viene risolto, si verifica un errore e il programma potrebbe fallire.

Ora, discutiamo di un esempio di errore di riferimento.

Esempio 1:

In questo esempio, utilizziamo una funzione integrata in Python per fare riferimento a un oggetto. Guarda il codice in dettaglio. Innanzitutto, importiamo i moduli e creiamo una classe denominata "check_object" in cui viene passato l'oggetto. Qui, utilizziamo la funzione def_init_ (self, name) e quindi definiamo "self.nome "come il nome. Ora, esegui il seguente codice sul tuo sistema:

Importa GC come G
Importa debolezza come WK
Classe check_object (oggetto):
def __init __ (self, name):
se stesso.nome = nome
def __del __ (self):
Stampa ('Elimina % S') % Self
print ('reference object =', a.nome)

Il risultato che otteniamo eseguendo il codice precedente è riportato nella seguente illustrazione. Puoi vedere che otteniamo un errore di riferimento che afferma che l'oggetto debolmente referenziato non esiste più.

Qui, possiamo vedere che chiedendo di stampare un oggetto di riferimento senza una definizione di oggetto adeguata, otteniamo un errore di riferimento.

Il modulo di riferimento debole consente a un programmatore di Python di formare i riferimenti deboli agli oggetti. Un riferimento debole a un oggetto non è sufficiente per mantenere a galla l'oggetto ed è l'unico riferimento rimanente al referente. Questi referenti sono riferimenti deboli o raccolte di immondizia che possono essere distrutti dal referente e dalla memoria che libera può essere usato per qualcos'altro.

Esempio 2:

Facciamo un altro esempio per capire meglio questo errore. Come abbiamo discusso in precedenza, quando qualsiasi oggetto è debolmente citato nel codice, si verifica un errore di riferimento. Utilizzando il seguente codice, ora proviamo a stampare gli oggetti prima e dopo l'utilizzo del comando Elimina.

Qui, utilizziamo una funzione integrata in Python per fare riferimento a un oggetto e chiamarlo "OBJ1". Viene creata una classe denominata "check_object". Qui, definiamo due funzioni - "_init" e "_del_" - per eseguire le funzioni separate.

In seguito, utilizziamo l'oggetto creato della classe nel comando proxy che è WK.proxy (obj_check). Per stampare dopo l'istruzione, il "obj_check" creato non è impostato su nessuno.

Importa GC come G
Importa debolezza come WK
Classe check_object (oggetto):
def __init __ (self, name):
se stesso.nome = nome
def __del __ (self):
Stampa ('Elimina % S') % Self
obj_check = check_object ('oggetto')
ABC = WK.proxy (obj_check)
print ('prima di eliminare =', ABC.nome)
obj_check = nessuno
print ('After Eleting =', ABC.nome)

Quando eseguiamo il codice precedente, otteniamo il seguente output:

Come puoi vedere, quando eseguiamo il codice, otteniamo un errore di riferimento perché prima di eliminare l'oggetto, Python ignora l'eccezione nella funzione e provoca un errore perché gli operandi erano di un tipo diverso e non lo supportano.

Per riassumere il motivo per cui si verifica l'errore di riferimento, possiamo dire che quando si rimuove un oggetto da un programma, si verifica un errore di riferimento che provoca la rimozione di tutti i riferimenti all'oggetto. Il modo più comune in cui si verifica questo errore è se il tuo programma ha la classe 1 e la classe 2 e diciamo che la classe 2 sia eliminata, ci resta solo la classe 1 senza alcun legame con la classe 2. La relazione tra le classi 1 e 2 rimane ma non vi è alcun riferimento alla classe 2 perché è stata rimossa o richiamata. L'errore può essere causato dalla configurazione errata delle radici di origine e dal programma che stai usando potrebbe non sapere dove trovare il collegamento.

Come risolvere gli errori di riferimento in Python?

Gli errori di riferimento possono essere risolti utilizzando un'istruzione IF-ELSE o un'istruzione Try-Without. Possiamo vedere il codice per risolvere l'errore di riferimento nell'esempio seguente.

Esempio 3:

In questo esempio, dimostriamo il codice che può essere utilizzato per risolvere un errore di riferimento in un programma. Questo codice non mostra alcun output. Contiene semplicemente alcuni punti che puoi seguire nei programmi per evitare gli errori di riferimento.

def test_proxy_ref (self):
a = c ()
UN.barra = 1
Rif = debolezza.proxy (a, sé.richiamare)
del a
DEF Controlla (proxy):
proxy.sbarra
extra_collect ()
se stesso.AsserTraises (debole.ReferenceError, Controlla, Rif)
Se test_support.is_jython:
se stesso.AsserTraises (debole.ReferenceError, bool, ref)
altro:
se stesso.AsserTraises (debole.ReferenceError, bool, debolif.proxy (c ()))
se stesso.assert_ (self.cbcalled == 2)

La prima funzione che utilizziamo è def test_proxy_ref (self) che viene utilizzata per definire un riferimento proxy di test a self. Definiamo quindi che la variabile a = c () e a.barra = 1.

Ora utilizziamo la sintassi di riferimento "Riferimento debole.proxy (a, sé.callback) "per richiamare il riferimento menzionato. Questa funzione di callback garantisce che tutti i riferimenti siano invalidati prima che vengano chiamati i callback. È importante che il primo riferimento sia richiamato o in termini semplici. Il riferimento più recente viene ripulito prima che venga chiamato il secondo riferimento. Questo è un test che invalida tutti i riferimenti prima che vengano fatti qualsiasi callback, quindi c'è solo una menzione della funzione "_weakref". Per controllare il proxy, utilizziamo il controllo funzione (proxy): proxy.sbarra. La funzione di raccolta extra viene utilizzata per calciare il programma Python nel dispositivo e aiuta con i callback che il thread deve chiamare.

La funzione IF-Else in Python è ora utilizzata. Questa funzione viene creata per verificare la frase di prova ed eseguire l'istruzione "if" in un caso in cui la condizione è vera. Altrimenti, viene eseguita l'istruzione "else".

Conclusione

In questo post, abbiamo appreso che si verifica un errore di riferimento a causa del debole riferimento per procura. Molte volte, può verificarsi un errore in un programma, un errore di sintassi o un errore logico. Un errore di riferimento rientra nella categoria di errore logico. Abbiamo spiegato in quali casi si verifica un errore di riferimento attraverso un esempio. Prova questi esempi sul tuo sistema per comprendere meglio l'argomento degli errori di riferimento.