Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengendalikan UnboundLocalError dalam Skop Fungsi Bersarang Python?
Skop Fungsi Bersarang dan Ralat Setempat Tidak Terikat
Dalam Python, skop fungsi bersarang boleh membawa kepada isu dengan pembolehubah setempat. Pertimbangkan kod berikut:
def outer(): ctr = 0 def inner(): ctr += 1 inner()
Apabila melaksanakan kod ini, anda mungkin menghadapi UnboundLocalError untuk pembolehubah 'ctr' dalam fungsi dalaman. Ralat ini berlaku kerana fungsi dalam cuba mengubah suai pembolehubah 'ctr' yang ditakrifkan dalam fungsi luar, tetapi ia tidak dikenali sebagai pembolehubah tempatan dalam skop dalaman.
Untuk menyelesaikan isu ini, terdapat dua pendekatan:
Python 3:
Dalam Python 3, pernyataan bukan tempatan membenarkan anda mengubah suai pembolehubah bukan tempatan dalam fungsi bersarang:
def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1 inner()
Python 2:
Python 2 tidak mempunyai pernyataan bukan tempatan, tetapi penyelesaiannya ialah menggunakan struktur data untuk menahan pembolehubah dan bukannya terus menggunakan nama pembolehubah:
def outer(): ctr = [0] # Store the counter in a list def inner(): ctr[0] += 1 inner()
Dengan menggunakan pendekatan ini , anda mengelakkan pengikatan semula nama tanpa nama dan memastikan fungsi dalaman boleh mengubah suai pembolehubah yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan UnboundLocalError dalam Skop Fungsi Bersarang Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!