Dokumentasi Python menerangkan bahawa UnboundLocalError berlaku apabila pembolehubah tempatan diakses sebelum ia ditetapkan nilai. Walau bagaimanapun, ia menyebut bahawa Python tidak menguatkuasakan pengisytiharan. Ini menimbulkan persoalan: bagaimana pembolehubah boleh "tidak terikat" jika ia belum diisytiharkan?
Dalam Python, pembolehubah mengikat berlaku melalui tugasan, gelung, fungsi, import , pengendalian pengecualian dan pengurusan konteks. Pengikatan menentukan skop pembolehubah. Nama dianggap tempatan jika ia terikat dalam fungsi atau kaedah, melainkan ditandakan secara eksplisit sebagai global atau bukan tempatan menggunakan pernyataan yang sesuai.
Nama tidak terikat merujuk kepada pembolehubah yang telah dirujuk sebelum diikat. Ini berbeza daripada nama yang tidak ditentukan, yang belum lagi dibuat atau diberikan. Apabila nama tidak terikat ditemui, Python menimbulkan UnboundLocalError.
Pertimbangkan kod berikut:
def foo(): if False: spam = 'eggs' print(spam)
Melaksanakan foo() akan menghasilkan UnboundLocalError . Pembolehubah spam dirujuk dalam cetakan(spam) tanpa pernah diberikan nilai. Walaupun ia ditakrifkan dalam pernyataan if, pernyataan itu tidak dilaksanakan, jadi spam kekal tidak terikat.
Untuk mengelakkan UnboundLocalError, pastikan pembolehubah tempatan diberikan nilai sebelum merujuknya . Sebagai alternatif, isytiharkan pembolehubah global secara eksplisit menggunakan pernyataan global atau pembolehubah bukan tempatan menggunakan pernyataan bukan tempatan.
Ringkasnya, nama menjadi tidak terikat apabila ia dirujuk sebelum diikat dalam skop semasa. Ini berlaku kerana Python tidak memerlukan pengisytiharan berubah-ubah, membenarkan operasi mengikat berlaku di mana-mana dalam blok kod. Menggunakan tugasan dan pengurusan skop yang betul boleh membantu mengelakkan pengecualian UnboundLocalError.
Atas ialah kandungan terperinci Bila dan Bagaimana UnboundLocalError Berlaku dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!