Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengendalikan UnboundLocalError dalam Skop Fungsi Bersarang Python?

Bagaimana untuk Mengendalikan UnboundLocalError dalam Skop Fungsi Bersarang Python?

Barbara Streisand
Barbara Streisandasal
2024-10-21 18:42:03158semak imbas

How to Handle UnboundLocalError in Python's Nested Function Scopes?

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!

Kenyataan:
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