Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengendalikan Ralat Pembolehubah Tempatan Tidak Terikat dalam Skop Fungsi Bersarang?

Bagaimana untuk Mengendalikan Ralat Pembolehubah Tempatan Tidak Terikat dalam Skop Fungsi Bersarang?

DDD
DDDasal
2024-10-21 18:42:29691semak imbas

How to Handle Unbound Local Variable Errors in Nested Function Scopes?

Menyelesaikan UnboundLocalError dalam Skop Fungsi Bersarang

Penterjemah Python menemui UnboundLocalError apabila mengakses pembolehubah tempatan tidak terikat dalam fungsi bersarang. Isu ini timbul apabila fungsi bersarang cuba mengubah suai pembolehubah yang diisytiharkan dalam fungsi luar.

Contoh:

Pertimbangkan kod berikut:

<code class="python">def outer():
    ctr = 0

    def inner():
        ctr += 1

    inner()</code>

Setelah melaksanakan kod ini, jurubahasa menjana ralat berikut:

Traceback (most recent call last):
  File "foo.py", line 9, in <module>
    outer()
  File "foo.py", line 7, in outer
    inner()
  File "foo.py", line 5, in inner
    ctr += 1
UnboundLocalError: local variable 'ctr' referenced before assignment

Punca:

Walaupun mempunyai skop bersarang, fungsi dalaman tidak boleh mengakses 'ctr ' pembolehubah secara langsung kerana ia ditakrifkan dalam fungsi luar. Ini menghasilkan pembolehubah tidak terikat, mencetuskan UnboundLocalError.

Penyelesaian:

Python 3 menawarkan pernyataan 'nonlocal' untuk membolehkan pembolehubah mengikat semula dalam skop bersarang. Mengubah suai kod untuk memasukkan 'bukan tempatan' menyelesaikan isu:

<code class="python">def outer():
    ctr = 0

    def inner():
        nonlocal ctr
        ctr += 1

    inner()</code>

Untuk pengguna Python 2, pendekatan alternatif diperlukan:

  • Penyingkiran Nama Bare:
    Alih keluar pembolehubah ctr kosong dan letakkannya dalam struktur data atau sebagai atribut. Sebagai contoh, ctr = [0].
  • Penugasan Semula Pembolehubah:
    Tetapkan semula pembolehubah ctr dalam fungsi dalam dan bukannya menggunakan penjilidan nama tanpa nama: ctr = ctr 1.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Ralat Pembolehubah Tempatan Tidak Terikat dalam Skop Fungsi Bersarang?. 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