oversigt: hvis du vil løse en UnboundLocalError , når den lokale variabel tildeles igen efter første brug, kan du enten bruge nøgleordet global eller nøgleordet nonlocal. Nøgleordet global giver dig mulighed for at ændre værdierne for en global variabel inden for en funktions lokale rækkevidde, mens nøgleordet nonlocal giver lignende funktionalitet i tilfælde af indlejrede funktioner.

Problem: givet en lokal variabel. Hvordan løses en UnboundLocalError , når den lokale variabel tildeles igen efter første brug?

eksempel:

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

Output:

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 behandler løsningerne på vores problem, må vi forstå årsagen bag UnboundLocalError.

Root Cause of UnboundLocalErrors:

når en variabel er tildelt inden for en funktion, behandles den som en lokal variabel som standard i Python. Hvis der refereres til en lokal variabel, før en værdi er blevet tildelt/bundet til den, hæves en UnboundLocalError . I ovenstående eksempel, når variablen 'val' læses af Python-tolken inde i func() – funktionen, antager den, at 'val' er en lokal variabel. Imidlertid indser det snart, at den lokale variabel er blevet henvist til, før der er tildelt nogen værdi inden for funktionen. Således kaster det en UnboundLocalError.

med andre ord kan vi kun få adgang til en global variabel i en funktion, men kan ikke ændre den fra funktionen (medmindre du tvinger en global eller ikke-lokal opgave ved hjælp af nøgleordene global eller nonlocal).

Bemærk: forældreklassen for alle Python-undtagelser er BaseException. Følgende diagram repræsenterer undtagelseshierarkiet for UnboundLocalError.

Unboundlocalerror Undtagelseshierarki

nu hvor vi ved hvorfor og hvornår en UnboundLocalError hæves, lad os se på de sandsynlige løsninger for at overvinde denne fejl.

Indholdsfortegnelse

Metode 1: Brug af det globale nøgleord

vi kan bruge nøgleordet global til at få adgang til og ændre en global variabel fra det lokale omfang af en funktion. Enhver variabel, der oprettes uden for en funktion, er som standard global, mens enhver variabel, der oprettes i funktionen, som standard er lokal. For at ændre en global variabel inden for funktionen og undgå en UnboundLocalError kan vi bruge nøgleordet global.

lad os se på følgende kode, som forenkler ovenstående koncept:

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

Output:

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

Metode 2: Brug af ikke-lokalt nøgleord

nøgleordet nonlocal bruges, når vi har en indlejret funktion. I en sådan situation kan lokal rækkevidde af en variabel muligvis ikke defineres, dvs.omfanget af en variabel er hverken lokal eller global.

lad os se på følgende eksempel for at forstå brugen af nøgleordet nonlocal til at håndtere vores 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()

Output

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

i ovenstående program bruges nøgleordet nonlocal med variablen val inde i den indlejrede funktion foo() for at oprette en ikke-lokal variabel. Hvis værdien af variablen nonlocal ændres, afspejles ændringerne også i den lokale variabel.

ansvarsfraskrivelse: nøgleordet nonlocal fungerer kun i Python 3 og derover.

metode 3: Brug af et Mutabelt objekt

da nonlocal ikke fungerer i versioner af Python før Python 3, kan du bruge et mutabelt objekt som en python-ordbog til at gemme værdierne, hvis du ikke vil oprette en global variabel.

lad os se på følgende program for at forstå brugen af et foranderligt objekt for at overvinde 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 parametre til funktionen

dette er den traditionelle måde at løse vores problem på. I stedet for at bruge en global variabel kan vi overføre parametre til den definerede funktion for at undgå en UnboundLocalError. Lad os se på følgende kode for at se, hvordan dette kan gø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)

Output:

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

globalt nøgleord vs Ikke-lokalt nøgleord

før vi afslutter denne artikel, lad os se på de vigtigste forskelle mellem en global og nonlocal variabel/nøgleord.

  1. i modsætning til nøgleordet global fungerer nøgleordet nonlocal kun i Python 3 og derover.
  2. nøgleordet global kan bruges med allerede eksisterende globale variabler eller nye variabler, mens nøgleordet nonlocal skal defineres med en allerede eksisterende variabel.

konklusion

fra ovenstående diskussion lærte vi at håndtere UnboundLocalError i vores kode kan vi bruge en af følgende metoder:

  1. brug nøgleordet global .
  2. brug nøgleordet nonlocal i tilfælde af indlejrede funktioner.
  3. brug et bevægeligt objekt.
  4. send parametre til en funktion.

jeg håber, at du fandt denne artikel nyttig, og efter at have læst den kan du let håndtere UnboundLocalError. Venligst stay tuned for mere interessante artikler.

hvor skal vi hen herfra?

nok teori, lad os få lidt øvelse!

for at få succes med kodning skal du komme derude og løse reelle problemer for rigtige mennesker. Sådan kan du nemt blive en sekscifret tjener. Og Sådan polerer du de færdigheder, du virkelig har brug for i praksis. Når alt kommer til alt, hvad er brugen af læringsteori, som ingen nogensinde har brug for?

Øvelsesprojekter er, hvordan du skærper din sav i kodning!

vil du blive kodemester ved at fokusere på praktiske kodeprojekter, der faktisk tjener dig penge og løser problemer for mennesker?

derefter blive en Python freelance Udvikler! Det er den bedste måde at nærme sig opgaven med at forbedre dine Python—færdigheder-selvom du er en komplet nybegynder.

Deltag i min gratis hjemmeside “Sådan bygger du din High-Income Skill Python” og se, hvordan jeg voksede min kodningsvirksomhed online, og hvordan du også kan—fra dit eget hjem.

Tilmeld dig den gratis hjemmeside nu!