összegzés: az UnboundLocalError feloldásához, amikor a helyi változót az első használat után újra hozzárendelik, használhatja az global vagy a nonlocal kulcsszót. A global kulcsszó lehetővé teszi a globális változó értékeinek módosítását egy függvény helyi hatókörén belül, míg a nonlocal kulcsszó hasonló funkciókat biztosít beágyazott függvények esetén.

probléma: adott helyi változó. Hogyan lehet megoldani egy UnboundLocalError értéket, amikor a helyi változót az első használat után újra hozzárendelik?

példa:

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

kimenet:

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

mielőtt a problémánk megoldásaival foglalkoznánk, meg kell értenünk a UnboundLocalErrormögött álló kiváltó okot.

az UnboundLocalErrors kiváltó oka:

ha egy változó egy függvényen belül van hozzárendelve, akkor a Python alapértelmezés szerint helyi változóként kezeli. Ha egy helyi változóra hivatkozunk, mielőtt egy értéket hozzárendelnénk/kötnénk hozzá, akkor UnboundLocalError értéket emelünk. A fenti példában, amikor a 'val' változót a Python tolmács olvassa a func() függvényen belül, feltételezi, hogy a 'val' helyi változó. Azonban hamarosan rájön, hogy a helyi változóra már hivatkoztak, mielőtt bármilyen értéket rendeltek volna hozzá a függvényen belül. Így dob egy UnboundLocalError.

más szavakkal, csak egy függvényen belül férhetünk hozzá egy globális változóhoz, de nem módosíthatjuk azt a függvényen belül (hacsak nem kényszerítünk globális vagy nem helyi hozzárendelést a global vagy nonlocal kulcsszavak használatával).

Megjegyzés: Az összes Python kivétel szülőosztálya BaseException. Az alábbi ábra a UnboundLocalError kivételhierarchiáját mutatja.

UnboundLocalError Kivételhierarchia

most, hogy tudjuk, miért és amikor UnboundLocalError emelkedik, vessünk egy pillantást a lehetséges megoldásokra a hiba leküzdésére.

Tartalomjegyzék

1. módszer: a

globális kulcsszó használata a global kulcsszóval elérhetünk és módosíthatunk egy globális változót egy függvény helyi hatóköréből. Bármely függvényen kívül létrehozott változó alapértelmezés szerint globális, míg a függvényen belül létrehozott bármely változó alapértelmezés szerint helyi. Így a függvényen belüli globális változó módosításához és a UnboundLocalError elkerüléséhez használhatjuk a global kulcsszót.

vessünk egy pillantást a következő kódra, amely egyszerűsíti a fenti koncepciót:

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

kimenet:

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

2. módszer: nem helyi kulcsszó használata

a nonlocal kulcsszót akkor használjuk, ha beágyazott függvényünk van. Ilyen helyzetben előfordulhat, hogy a változó helyi hatóköre nem definiálható, vagyis a változó hatóköre sem helyi, sem globális.

nézzük meg a következő példát, hogy megértsük a nonlocal kulcsszó használatát a problémánk kezelésére.

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

a fenti programban a nonlocal kulcsszót a val változóval együtt használják a foo() beágyazott függvény belsejében egy nem helyi változó létrehozásához. Ha a nonlocal változó értéke megváltozik, akkor a változások a helyi változóban is tükröződnek.

jogi nyilatkozat: a nonlocal kulcsszó csak a Python 3 és újabb verzióiban működik.

3. módszer: Változtatható objektum használata

mivel a nonlocal nem működik a Python 3 előtti verzióiban, használhat olyan változtatható objektumot, mint egy python szótár, az értékek tárolására, ha nem akar globális változót létrehozni.

vessünk egy pillantást a következő programra, hogy megértsük a változtatható objektum használatát a UnboundLocalError leküzdése érdekében.

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

4. módszer: paraméterek átadása a

függvénynek ez a probléma megoldásának hagyományos módja. Globális változó használata helyett paramétereket adhatunk át a definiált függvénynek, hogy elkerüljük a UnboundLocalErrorértéket. Vessünk egy pillantást a következő kódra, hogy lássuk, hogyan lehet ezt megtenni:

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

kimenet:

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

globális kulcsszó vs Nem helyi kulcsszó

mielőtt befejeznénk ezt a cikket, vessünk egy pillantást a legfontosabb különbségekre a global és nonlocal változó/kulcsszavak között.

  1. az global kulcsszóval ellentétben a nonlocal kulcsszó csak a Python 3-as vagy újabb verzióiban működik.
  2. az global kulcsszó használható már létező globális változókkal vagy új változókkal, míg a nonlocal kulcsszót egy már létező változóval kell meghatározni.

következtetés

a fenti megbeszélésből megtudtuk, hogy a kódunkban a UnboundLocalError kezeléséhez a következő módszerek egyikét használhatjuk:

  1. használja a global kulcsszót.
  2. beágyazott függvények esetén használja a nonlocal kulcsszót.
  3. változékony objektum használata.
  4. paraméterek átadása egy függvénynek.

remélem, hogy hasznosnak találta ezt a cikket, és elolvasása után könnyedén kezelheti a UnboundLocalError – ot. Kérjük, maradjon velünk további érdekes cikkekért.

Hová menjünk innen?

elég elmélet, menjünk egy kis gyakorlat!

ahhoz, hogy sikeres legyen a kódolásban, ki kell jutnia oda, és valódi problémákat kell megoldania valódi emberek számára. Így válhat egy hat számjegyű kereső könnyen. És így csiszolja meg azokat a készségeket, amelyekre valóban szüksége van a gyakorlatban. Végül is mi haszna a tanulási elméletnek, amelyre soha senkinek nincs szüksége?

gyakorlat projektek hogyan élesíteni a fűrész kódolás!

szeretne kódmesterré válni azáltal, hogy olyan gyakorlati kódprojektekre összpontosít, amelyek valóban pénzt keresnek és problémákat oldanak meg az emberek számára?

akkor legyen Python szabadúszó fejlesztő! Ez a legjobb módja annak, hogy megközelítse a Python készségek fejlesztésének feladatát—még akkor is, ha teljesen kezdő vagy.

Csatlakozz a “How to Build Your High-Income Skill Python” című ingyenes webináriumomhoz, és nézd meg, hogyan nőttem fel online a kódolási üzletemet, és hogyan tudsz te is—a saját otthonod kényelméből.

csatlakozzon az ingyenes webináriumhoz most!