Bagaimanakah Saya Boleh Mengakses Pengecualian Dinamakan di Luar Blok `kecuali` dalam Python 3?

Susan Sarandon
Lepaskan: 2024-10-30 13:14:03
asal
860 orang telah melayarinya

How Can I Access Named Exceptions Outside of `except` Blocks in Python 3?

Akses Named Exceptions Beyond except Blocks

Dalam Python 3, cubaan menggunakan pengecualian bernama di luar blok kecualinya biasanya mengakibatkan NameError atau UnboundLocalError. Tidak seperti Python 2, pengecualian dalam Python 3 mempunyai rujukan kepada surih baliknya, yang membawa kepada had skop dalam klausa kecuali.

Penjelasan

Pernyataan try secara eksplisit mengehadkan skop pengecualian terikat untuk mengelakkan rujukan bulat dan potensi kebocoran memori. Apabila pengecualian diberikan nama menggunakan sebagai, ia dikosongkan pada penghujung klausa. Ini bermakna untuk merujuk kepada pengecualian selepas itu, ia mesti terikat kepada nama yang berbeza.

Penyelesaian

Memandangkan Python 3 menjelaskan skop pengecualian, terdapat dua perkara utama pendekatan untuk mengakses pengecualian di luar blok kecuali mereka:

  1. Mengikat kepada Nama Baharu: Daripada memberikan pengecualian kepada pembolehubah yang sama, ikatkannya pada nama baharu sebelum keluar daripada klausa kecuali:

    <code class="python">try:
        raise Exception("Custom Error")
    except Exception as e:
        new_exc = e
    print(new_exc)</code>
    Salin selepas log masuk
  2. Mengosongkan Surih Balik: Jika pengecualian tidak diperlukan, surih baliknya boleh dipadamkan secara jelas untuk mengelakkan kebocoran memori:

    <code class="python">try:
        raise Exception("Custom Error")
    except Exception as e:
        e.__traceback__ = None
    print(e)</code>
    Salin selepas log masuk

Konteks Sejarah

Dalam Python 2, pengecualian tidak merujuk surih balik, menjadikan pengehadan skop tidak diperlukan. Akibatnya, tingkah laku ini berubah dalam Python 3 untuk menangani kemungkinan kebocoran sumber.

Awas

Apabila mengikat pengecualian kepada nama baharu, adalah penting untuk diingat bahawa pengecualian asal dikosongkan pada penghujung klausa kecuali. Menugaskan pengecualian kembali kepada dirinya sendiri (cth., exc = exc) tidak akan membuat pengikatan baharu dan akan mengakibatkan NameError.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Pengecualian Dinamakan di Luar Blok `kecuali` dalam Python 3?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!