Sammendrag: hvis du vil løse en UnboundLocalError når den lokale variabelen tilordnes på nytt etter første gangs bruk, kan du enten bruke global – nøkkelordet eller nonlocal – nøkkelordet. Nøkkelordet global lar deg endre verdiene til en global variabel fra en funksjons lokale omfang, mens nøkkelordet nonlocal gir lignende funksjonalitet i tilfelle nestede funksjoner.

Problem: Gitt en lokal variabel. Hvordan løser du en UnboundLocalError når den lokale variabelen tilordnes etter første bruk?

Eksempel:

val = 100def func(): val = val + 100 print(val)func()

Utgang:

Traceback (most recent call last): File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 9, in <module> func() File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 5, in func val = val + 100UnboundLocalError: local variable 'val' referenced before assignment

Før vi håndterer løsningene på vårt problem, må vi forstå grunnårsaken bak UnboundLocalError.

Rotårsak Til UnboundLocalErrors:

når en variabel er tilordnet i en funksjon, behandles den som en lokal variabel som standard i Python. Hvis en lokal variabel refereres til før en verdi er tilordnet/bundet til den, heves en UnboundLocalError . I eksemplet ovenfor når variabelen 'val' leses av Python-tolken inne i func() – funksjonen, antar det at 'val' er en lokal variabel. Det innser imidlertid snart at den lokale variabelen er referert før noen verdi er tildelt den i funksjonen. Dermed kaster den en UnboundLocalError.

med andre ord kan vi bare få tilgang til en global variabel i en funksjon, men kan ikke endre den fra funksjonen (med mindre du tvinger en global eller ikke-lokal tildeling ved hjelp av nøkkelordene global eller nonlocal).

Merk: foreldreklassen for Alle Python-unntak er BaseException. Følgende diagram representerer unntakshierarkiet for UnboundLocalError.

UnboundLocalError Unntakshierarki

nå som vi vet hvorfor og når en UnboundLocalError heves, la oss se på de sannsynlige løsningene for å overvinne denne feilen.

Innholdsfortegnelse

Metode 1: ved hjelp av det globale Søkeordet

Kan vi bruke global søkeordet for å få tilgang til og endre en global variabel fra det lokale omfanget av en funksjon. Enhver variabel som er opprettet utenfor en funksjon, er global som standard, mens enhver variabel som er opprettet i funksjonen, er lokal som standard. For å endre en global variabel fra funksjonen og unngå en UnboundLocalError kan vi bruke global søkeordet.

La oss se på følgende kode som forenkler konseptet ovenfor:

val = 100print("Value at First Usage: ", val)def func(): global val val = val + 100 print("Output after Modification within func(): ", val)func()

Utgang:

Value at First Usage: 100Output after Modification within func(): 200

Metode 2: Bruke nonlocal Søkeord

nonlocal søkeordet brukes når vi har en nestet funksjon. I en slik situasjon kan det ikke defineres lokalt omfang av en variabel, det vil si at omfanget av en variabel ikke er lokal eller global.

La oss ta en titt på følgende eksempel for å forstå bruken av nonlocal søkeordet for å håndtere vårt problem.

def func(): val = 50 print("Output of func:", val) def foo(): nonlocal val val = val + 100 print("Output of foo:", val) foo() print("Output of func() after changes made to foo():", val)func()

Utgang

Output of func: 50Output of foo: 150Output of func() after changes made to foo(): 150

i programmet ovenfor brukes nonlocal nøkkelordet med variabelen val inne i nestet funksjon foo() for å opprette en ikke-lokal variabel. Hvis verdien av nonlocal variabelen endres, gjenspeiles endringene også i den lokale variabelen.

Ansvarsfraskrivelse: nonlocal søkeordet fungerer bare I Python 3 og nyere.

Metode 3: Ved Å bruke Et Foranderlig Objekt

siden nonlocal ikke fungerer i Versjoner Av Python før Python 3, kan du bruke et foranderlig objekt som en python-ordbok, for å lagre verdiene hvis du ikke vil opprette en global variabel.

La oss se på følgende program for å forstå bruken av et foranderlig objekt for å overvinne UnboundLocalError.

variables = { # creating a mutable object/dictionary 'val': 100}print('Output before Modification of val: ', variables)def func(): variables += 50 print('Output after Modification of val: ', variables)func()
Output before Modification of val: 100Output after Modification of val: 150

Metode 4: Passerer Parametere Til Funksjonen

dette er den tradisjonelle måten å løse problemet på. I stedet for å bruke en global variabel, kan vi sende parametere til den definerte funksjonen for å unngå en UnboundLocalError. La oss ta en titt på følgende kode for å se hvordan dette kan gjøres:

val = 100print("Value of val at first use: ", val)def func(v): v = v + 100 print("Output of val after modification:", v)func(val)

Utgang:

Value of val at first use: 100Output of val after modification: 200

Global Keyword vs Nonlocal Keyword

Før du avslutter denne artikkelen, la oss ta en titt på de viktigste forskjellene mellom en global og nonlocal variabel/søkeord.

  1. I Motsetning til global – søkeordet, fungerer nonlocal – søkeordet bare I Python 3 og nyere.
  2. global søkeordet kan brukes med eksisterende globale variabler eller nye variabler, mens nonlocal søkeordet må defineres med en eksisterende variabel.

Konklusjon

fra ovennevnte diskusjon lærte vi at for å håndtere UnboundLocalError i vår kode kan vi bruke en av følgende metoder:

  1. Bruk nøkkelordet global .
  2. Bruk nøkkelordet nonlocal i tilfelle nestede funksjoner.
  3. Bruk et foranderlig objekt.
  4. Send parametere til en funksjon.

jeg håper at du fant denne artikkelen nyttig, og etter å ha lest den kan du håndtere UnboundLocalError med letthet. Følg med for flere interessante artikler.

Hvor Skal Du Gå Herfra?

nok teori, la oss få litt øvelse!

for å lykkes i koding, må du komme deg ut og løse virkelige problemer for ekte mennesker. Slik kan du enkelt bli en sekssifret tjener. Og det er slik du polerer ferdighetene du virkelig trenger i praksis. Tross alt, hva er bruken av læringsteori som ingen noensinne trenger?

Praksis prosjekter er hvordan du skjerpe sagen i koding!

vil du bli en kodemester ved å fokusere på praktiske kodeprosjekter som faktisk tjener penger og løser problemer for folk?

så bli En Python freelance utvikler! Det er den beste måten å nærme seg oppgaven med å forbedre Python-ferdighetene dine—selv om du er en komplett nybegynner.

Bli med på mitt gratis webinar «Hvordan Bygge Din High-Income Skill Python» og se hvordan jeg vokste min kodingsvirksomhet på nettet og hvordan du også kan-fra komforten til ditt eget hjem.

Bli med på gratis webinar nå!