Python referansefeil

Python referansefeil
Python -programmer består av mange feil og unntak, og noen av dem er innebygd. Disse feilene og unntakene oppstår når Python -tolken møter feil. En programmerer er ikke immun mot feil når du skriver et Python -program og vil sannsynligvis møte uhåndterte feil. Når vi prøver å åpne en fil som ikke eksisterer eller dele et tall med null, er et unntak støpt. Hver gang disse feilene oppstår, oppretter Python unntaksobjektene. Hvis de ikke blir håndtert riktig, skriver Python ut en sporback av den feilen. Denne artikkelen handler om et av unntakene i Python som kalles en referansefeil.

Referansefeil

I Python er mange feil og unntak kategorisert i to hovedgrupper: syntaksfeil og logiske feil. Logiske feil er også kjent som unntak. Unntak oppstår når feil eller ulovlig operasjoner utløses. En referansefeil faller inn under kategorien logiske feil. Logiske feil er de som oppstår på kodeutførelsestid. Når det brukes en svak referanseproxy for å få tilgang til en referent som er samlet fra minnet, utløses en referansefeil. En referansefeil er en del av Pythons innebygde unntak. Disse unntakene kastes etter feilen som oppstår.

I Python har et program 4 funksjoner - l, m, n og o. Hvis vi bruker et program der funksjon l samtaler funksjon m, funksjon m anropsfunksjon n, som igjen samtaler funksjon o. Anta at det er et unntak som oppstår i funksjon n, men som ikke er løst eller håndtert. Unntaket sendes til funksjon m og deretter til funksjon l. Hvis feilen ikke er løst, oppstår en feil og programmet kan mislykkes.

La oss nå diskutere et eksempel på en referansefeil.

Eksempel 1:

I dette eksemplet bruker vi en innebygd funksjon i Python for å referere til et objekt. Se på koden i detalj. Først importerer vi modulene og lager en klasse som heter "check_object" der objektet er bestått. Her bruker vi def_init_ (selv, navn) -funksjonen og deretter definere “selv.Navn ”som navn. Kjør nå følgende kode på systemet ditt:

Importer GC som G
Importer svakef som wk
Klassekontroll_objekt (objekt):
def __init __ (selv, navn):
selv-.Navn = Navn
def __del __ (selv):
utskrift ('slett det % s') % selv
print ('referanseobjekt =', a.Navn)

Resultatet som vi får ved å kjøre den forrige koden er gitt i følgende illustrasjon. Du kan se at vi får en referansefeil som sier at det svakt refererte objektet ikke lenger eksisterer.

Her kan vi se at ved å be om å skrive ut et referanseobjekt uten en riktig objektdefinisjon, får vi en referansefeil.

Den svake referansemodulen tillater en Python -programmerer å danne de svake referansene til objekter. En svak referanse til et objekt er ikke nok til å holde objektet flytende og er den eneste gjenværende referansen til referenten. Disse referentene er svake referanser eller samlinger av søppel som kan ødelegges av referenten og minnet som frigjøres, kan brukes til noe annet.

Eksempel 2:

La oss ta et annet eksempel for å forstå denne feilen bedre. Som vi diskuterte tidligere, når noe objekt er svakt referert til i kode, oppstår en referansefeil. Ved hjelp av følgende kode prøver vi nå å skrive ut objektene før og etter å ha brukt Delete -kommandoen.

Her bruker vi en innebygd funksjon i Python for å referere til et objekt og kaller det “OBJ1”. En klasse som heter “check_object” er opprettet. Her definerer vi to funksjoner - “_init” og “_del_” - for å utføre de separate funksjonene.

Etter det bruker vi det opprettede objektet til klassen i proxy -kommandoen som er wk.Proxy (obj_check). For å skrive ut etter uttalelsen, er den opprettet “obj_check” satt til ingen.

Importer GC som G
Importer svakef som wk
Klassekontroll_objekt (objekt):
def __init __ (selv, navn):
selv-.Navn = Navn
def __del __ (selv):
utskrift ('slett det % s') % selv
obj_check = check_object ('objekt')
ABC = wk.Proxy (obj_check)
trykk ('før sletting =', ABC.Navn)
obj_check = ingen
trykk ('Etter å ha slettet =', ABC.Navn)

Når vi kjører den forrige koden, får vi følgende utdata:

Som du kan se, når vi kjører koden, får vi en referansefeil fordi før du sletter objektet, ignorerer Python unntaket i funksjonen og forårsaker en feil fordi operandene var av en annen type og ikke støttet den.

For å oppsummere hvorfor referansefeilen oppstår, kan vi si at når du fjerner et objekt fra et program, oppstår det en referansefeil som fører til at alle referanser til objektet blir fjernet. Den vanligste måten denne feilen oppstår er hvis programmet ditt har klasse 1 og klasse 2, og la oss si at klasse 2 er slettet, vi sitter igjen med bare klasse 1 uten binding til klasse 2. Forholdet mellom klasse 1 og 2 gjenstår, men det er ingen henvisning til klasse 2 fordi det er fjernet eller kalt tilbake. Feilen kan være forårsaket av feilkonfigurasjon av kildøttene, og programmet du bruker vet kanskje ikke hvor du skal finne lenken.

Hvordan løse referansefeil i Python?

Referansefeil kan løses ved hjelp av en if-ests-setning eller en prøve-uten uttalelse. Vi kan se koden for å løse referansefeilen i følgende eksempel.

Eksempel 3:

I dette eksemplet demonstrerer vi koden som kan brukes til å løse en referansefeil i et program. Denne koden viser ingen utgang. Den inneholder ganske enkelt noen punkter du kan følge i programmene dine for å unngå referansefeil.

def test_proxy_ref (selv):
a = c ()
en.Bar = 1
Ref = Weakref.proxy (a, selv.Ring tilbake)
del a
def check (proxy):
fullmakt.bar
extra_collect ()
selv-.Assertraises (Weakref.ReferenceError, sjekk, ref)
Hvis test_support.IS_JYTHON:
selv-.Assertraises (Weakref.ReferenceError, Bool, Ref)
ellers:
selv-.Assertraises (Weakref.ReferenceError, Bool, Weakref.Proxy (C ()))
selv-.assert_ (selv.CBCalled == 2)

Den første funksjonen som vi bruker er def test_proxy_ref (self) som brukes til å definere en test proxy -referanse til meg selv. Vi definerer da at variabelen a = c () og a.Bar = 1.

Nå bruker vi referansesyntaks “Svak referanse.proxy (a, selv.tilbakeringing) ”for å ringe tilbake referansen som ble nevnt. Denne tilbakeringingsfunksjonen sikrer at alle referanser blir ugyldiggjort før tilbakeringingene kalles. Det er viktig at den første referansen kalles tilbake eller på enkle termer. Den siste referansen blir renset først før den andre referansen kalles. Dette er en test som ugyldiggjør alle referanser før noen tilbakeringinger blir gjort, så det er bare en omtale av "_weakref" -funksjonen. For å sjekke proxy, bruker vi funksjonskontrollen (proxy): proxy.bar. Den ekstra samlefunksjonen brukes til å sparke Python -programmet inn i enheten og hjelper med tilbakeringingene som tråden trenger å ringe.

If-elv-funksjonen i Python brukes nå. Denne funksjonen opprettes for å sjekke testfrasen og utføre "hvis" -uttalelsen i en sak når tilstanden er sann. Ellers blir "ellers" uttalelsen utført.

Konklusjon

I dette innlegget lærte vi at en referansefeil oppstår på grunn av den svake proxy -referansen. Mange ganger kan det oppstå en feil i et program, enten en syntaksfeil eller en logisk feil. En referansefeil faller inn under kategorien logisk feil. Vi forklarte i hvilke tilfeller oppstår en referansefeil gjennom et eksempel. Prøv disse eksemplene på systemet ditt for å få en bedre forståelse av temaet referansefeil.