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

Bagaimana untuk Mengendalikan UnboundLocalError dalam Skop Fungsi Bersarang Python?

Barbara Streisand
Lepaskan: 2024-10-21 18:42:03
asal
262 orang telah melayarinya

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()
Salin selepas log masuk

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()
Salin selepas log masuk

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()
Salin selepas log masuk

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!

sumber:php
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