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

DDD
Lepaskan: 2024-10-21 18:42:29
asal
621 orang telah melayarinya

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

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!