Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengendalikan Ralat Pembolehubah Tempatan Tidak Terikat dalam Skop Fungsi Bersarang?
Menyelesaikan UnboundLocalError dalam Skop Fungsi Bersarang
Penterjemah Python menemui UnboundLocalError apabila mengakses pembolehubah tempatan tidak terikat dalam fungsi bersarang. Isu ini timbul apabila fungsi bersarang cuba mengubah suai pembolehubah yang diisytiharkan dalam fungsi luar.
Contoh:
Pertimbangkan kod berikut:
<code class="python">def outer(): ctr = 0 def inner(): ctr += 1 inner()</code>
Setelah melaksanakan kod ini, jurubahasa menjana ralat berikut:
Traceback (most recent call last): File "foo.py", line 9, in <module> outer() File "foo.py", line 7, in outer inner() File "foo.py", line 5, in inner ctr += 1 UnboundLocalError: local variable 'ctr' referenced before assignment
Punca:
Walaupun mempunyai skop bersarang, fungsi dalaman tidak boleh mengakses 'ctr ' pembolehubah secara langsung kerana ia ditakrifkan dalam fungsi luar. Ini menghasilkan pembolehubah tidak terikat, mencetuskan UnboundLocalError.
Penyelesaian:
Python 3 menawarkan pernyataan 'nonlocal' untuk membolehkan pembolehubah mengikat semula dalam skop bersarang. Mengubah suai kod untuk memasukkan 'bukan tempatan' menyelesaikan isu:
<code class="python">def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1 inner()</code>
Untuk pengguna Python 2, pendekatan alternatif diperlukan:
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Ralat Pembolehubah Tempatan Tidak Terikat dalam Skop Fungsi Bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!