Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Mengakses Pengecualian Dinamakan di Luar Blok `kecuali` dalam Python 3?

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

Susan Sarandon
Susan Sarandonasal
2024-10-30 13:14:03859semak imbas

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

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!

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