Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Python Membuang `UnboundLocalError` dalam Fungsi Bersarang, dan Bagaimana Ia Boleh Diselesaikan?

Mengapa Python Membuang `UnboundLocalError` dalam Fungsi Bersarang, dan Bagaimana Ia Boleh Diselesaikan?

Patricia Arquette
Lepaskan: 2024-12-23 08:20:22
asal
727 orang telah melayarinya

Why Does Python Throw an `UnboundLocalError` in Nested Functions, and How Can It Be Resolved?

UnboundLocalError: Tugasan Pembolehubah Pramatang dalam Blok Bersarang

Apabila bekerja dengan skop fungsi bersarang, seperti dalam kod yang disediakan, Python boleh menghadapi ralat mesej "UnboundLocalError: pembolehubah tempatan 'c' dirujuk sebelum tugasan." Ralat ini berlaku apabila pembolehubah yang ditetapkan dalam blok bersarang dirujuk sebelum ia dimulakan.

Dalam kod contoh:

a, b, c = (1, 2, 3)

def test():
    print(a)
    print(b)
    c += 1  # UnboundLocalError here
Salin selepas log masuk

Kod cuba mencetak pembolehubah a, b dan c dalam ujian fungsi(). Walaupun a dan b adalah pembolehubah global dan boleh diakses secara langsung, c wujud dalam skop setempat fungsi. Akibatnya, tugasan c = 1 mencipta pembolehubah tempatan c yang mengatasi pembolehubah global dengan nama yang sama.

Apabila kod dilaksanakan, Python memulakan a dan b dan meneruskan panggilan test(). Dalam test(), ia mencetak a dan b dengan jayanya, tetapi cuba mencetak pembolehubah tempatan c sebelum ia diberikan sebarang nilai, yang membawa kepada ralat.

Untuk menyelesaikan isu ini, seseorang mesti mengisytiharkan pembolehubah secara eksplisit sebagai global dalam fungsi menggunakan kata kunci global sebelum memberikan sebarang nilai. Ini memberitahu Python untuk menggunakan pembolehubah global dan bukannya mencipta pembolehubah tempatan. Kod yang diperbetulkan ialah:

a, b, c = (1, 2, 3)

def test():
    global c  # Declare 'c' as global
    print(a)
    print(b)
    c += 1
Salin selepas log masuk

Sebagai alternatif, dalam Python 3, seseorang boleh menggunakan kata kunci bukan tempatan, yang merujuk kepada skop fungsi penutup terdekat yang mempunyai pembolehubah dengan nama yang sama. Ini membolehkan seseorang mengubah suai pembolehubah bukan global yang diisytiharkan dalam fungsi luar. Kod yang dikemas kini menggunakan bukan tempatan ialah:

a, b, c = (1, 2, 3)

def test():
    nonlocal c
    print(a)
    print(b)
    c += 1
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Python Membuang `UnboundLocalError` dalam Fungsi Bersarang, dan Bagaimana Ia Boleh Diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan