Samenvatting: om een UnboundLocalError
op te lossen wanneer de lokale variabele opnieuw wordt toegewezen na het eerste gebruik, kunt u het global
sleutelwoord of het nonlocal
sleutelwoord gebruiken. Met het global
sleutelwoord kunt u de waarden van een globale variabele wijzigen vanuit het lokale bereik van een functie, terwijl het nonlocal
sleutelwoord vergelijkbare functionaliteit biedt in het geval van geneste functies.
probleem: gegeven een lokale variabele. Hoe een UnboundLocalError
oplossen wanneer de lokale variabele opnieuw wordt toegewezen na het eerste gebruik?
voorbeeld:
val = 100def func(): val = val + 100 print(val)func()
uitvoer:
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
voordat we ons bezighouden met de oplossingen voor ons probleem, moeten we de onderliggende oorzaak achter UnboundLocalError
begrijpen.
oorzaak van ongebonden lokale fouten:
wanneer een variabele binnen een functie is toegewezen, wordt deze standaard in Python als een lokale variabele behandeld. Als naar een lokale variabele wordt verwezen voordat er een waarde aan is toegewezen/gekoppeld, wordt een UnboundLocalError
verhoogd. In het bovenstaande voorbeeld, wanneer de variabele 'val'
wordt gelezen door de Python interpreter binnen de functie func()
, wordt aangenomen dat 'val'
een lokale variabele is. Echter, het realiseert zich al snel dat de lokale variabele is verwezen voordat enige waarde is toegewezen aan het binnen de functie. Dus het gooit een UnboundLocalError
.
met andere woorden, we hebben alleen toegang tot een globale variabele binnen een functie, maar kunnen deze niet wijzigen vanuit de functie (tenzij u een globale of nietlokale toewijzing forceert met behulp van de sleutelwoorden global
of nonlocal
).
Opmerking: De ouderklasse van alle Python-uitzonderingen is BaseException
. Het volgende diagram geeft de uitzonderingshiërarchie van de UnboundLocalError
weer.

nu we weten waarom en wanneer een UnboundLocalError
wordt verhoogd, laten we eens kijken naar de mogelijke oplossingen om deze fout te overwinnen.
inhoudsopgave:
Methode 1: met behulp van het globale sleutelwoord
kunnen we het global
sleutelwoord gebruiken om toegang te krijgen tot een globale variabele vanuit het lokale bereik van een functie en deze te wijzigen. Elke variabele die buiten een functie wordt gemaakt, is standaard globaal, terwijl elke variabele die binnen de functie wordt gemaakt, standaard lokaal is. Dus, om een globale variabele vanuit de functie te wijzigen en een UnboundLocalError
te vermijden, kunnen we het global
sleutelwoord gebruiken.
laten we eens kijken naar de volgende code die het bovenstaande concept vereenvoudigt:
val = 100print("Value at First Usage: ", val)def func(): global val val = val + 100 print("Output after Modification within func(): ", val)func()
uitvoer:
Value at First Usage: 100Output after Modification within func(): 200
Methode 2: niet-lokaal trefwoord
het nonlocal
trefwoord wordt gebruikt wanneer we een geneste functie hebben. In een dergelijke situatie kan de lokale reikwijdte van een variabele niet worden gedefinieerd, dat wil zeggen dat de reikwijdte van een variabele noch lokaal noch Globaal is.
laten we eens kijken naar het volgende voorbeeld om het gebruik van het nonlocal
sleutelwoord te begrijpen om ons probleem aan te pakken.
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
in het bovenstaande programma wordt het sleutelwoord nonlocal
gebruikt met de variabele val
binnen de geneste functie foo()
om een niet-lokale variabele te maken. Als de waarde van de variabele nonlocal
verandert, worden de veranderingen ook weerspiegeld in de lokale variabele.
Disclaimer: het nonlocal
sleutelwoord werkt alleen in Python 3 en hoger.
Methode 3: Het gebruik van een veranderlijk Object
aangezien nonlocal
niet werkt in versies van Python voor Python 3, kunt u een veranderlijk object zoals een Python woordenboek gebruiken om de waarden op te slaan als u geen globale variabele wilt aanmaken.
laten we eens kijken naar het volgende programma om het gebruik van een veranderlijk object te begrijpen om de UnboundLocalError
te overwinnen.
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
Methode 4: Parameters doorgeven aan de functie
dit is de traditionele manier om ons probleem op te lossen. In plaats van een globale variabele te gebruiken, kunnen we parameters doorgeven aan de gedefinieerde functie om een UnboundLocalError
te vermijden. Laten we eens kijken naar de volgende code om te zien hoe dit kan worden gedaan:
val = 100print("Value of val at first use: ", val)def func(v): v = v + 100 print("Output of val after modification:", v)func(val)
uitvoer:
Value of val at first use: 100Output of val after modification: 200
Global Keyword vs Nonlocal Keyword
voordat we dit artikel afsluiten, laten we eens kijken naar de belangrijkste verschillen tussen een global
en nonlocal
variabele/trefwoorden.
- in tegenstelling tot het
global
sleutelwoord, werkt hetnonlocal
alleen in Python 3 en hoger. - het
global
trefwoord kan worden gebruikt met reeds bestaande globale variabelen of nieuwe variabelen, terwijl hetnonlocal
trefwoord moet worden gedefinieerd met een reeds bestaande variabele.
conclusie
uit bovenstaande discussie hebben we geleerd dat we een van de volgende methoden kunnen gebruiken om UnboundLocalError
in onze code te behandelen:
- gebruik het
global
sleutelwoord. - gebruik het
nonlocal
sleutelwoord in het geval van geneste functies. - gebruik een veranderlijk object.
- geef parameters door aan een functie.
ik hoop dat u dit artikel nuttig vond en na het lezen kunt u gemakkelijk omgaan met UnboundLocalError
. Blijf op de hoogte voor meer interessante artikelen.
waar moet ik nu naartoe?
genoeg theorie, laten we wat oefenen!
om succesvol te worden in het coderen, moet je naar buiten gaan en echte problemen voor echte mensen oplossen. Zo kun je makkelijk een zes-cijferige verdiener worden. En zo polijst je de vaardigheden die je echt nodig hebt in de praktijk. Immers, wat is het nut van leren theorie die niemand ooit nodig heeft?
Oefenprojecten is hoe je je zaag scherpt in het coderen!
wilt u een code-master worden door u te concentreren op praktische code-projecten die u geld opleveren en problemen voor mensen oplossen?
word dan een Python freelance ontwikkelaar! Het is de beste manier om de taak van het verbeteren van uw Python vaardigheden te benaderen—zelfs als je een complete beginner bent.
Word lid van mijn gratis webinar “How to Build Your High-Income Skill Python” en kijk hoe ik mijn coderingsbedrijf online heb laten groeien en hoe jij dat ook kunt—vanuit het comfort van je eigen huis.
Meld u nu aan voor het gratis webinar!
Geef een antwoord