Dalam Python, UnboundLocalError berlaku apabila pembolehubah tempatan dirujuk sebelum ia diberikan nilai. Tidak seperti bahasa pengaturcaraan lain, Python tidak memerlukan pengisytiharan pembolehubah eksplisit. Sebaliknya, pembolehubah terikat kepada nilai apabila ditetapkan.
Salah satu cara untuk mencetuskan UnboundLocalError adalah dengan mengakses pembolehubah yang tidak ditetapkan:
>>> foobar Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'foobar' is not defined
Cara lain ialah apabila operasi tugasan gagal dilaksanakan, seperti seperti dalam blok bersyarat:
def foo(): if False: spam = 'eggs' print(spam) >>> foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in foo UnboundLocalError: local variable 'spam' referenced before assignment
Dalam Python, nama terikat pada nilai melalui pelbagai operasi: tugasan, parameter fungsi, pernyataan import, pengendali pengecualian dan pengurus konteks. Apabila nama diikat dalam skop fungsi, ia menjadi pembolehubah tempatan. Untuk mengakses pembolehubah global dalam fungsi, pernyataan global atau bukan tempatan mesti digunakan (dalam Python 3).
Sebagai contoh, fungsi berikut cuba mengakses pembolehubah global foo tetapi gagal kerana ia terikat dalam fungsi skop:
foo = None def bar(): if False: foo = 'spam' print(foo) >>> bar() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in bar UnboundLocalError: local variable 'foo' referenced before assignment
Walau bagaimanapun, menggunakan global foo menyelesaikan isu:
foo = None def bar(): global foo if False: foo = 'spam' print(foo) >>> bar() None
Memahami konsep pengikatan pembolehubah adalah penting untuk mengelakkan UnboundLocalErrors dalam Python.
Atas ialah kandungan terperinci Mengapa Saya Mendapat UnboundLocalError dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!