Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah skop pengecualian yang dinamakan berbeza antara Python 2.x dan 3.x?

Bagaimanakah skop pengecualian yang dinamakan berbeza antara Python 2.x dan 3.x?

Barbara Streisand
Barbara Streisandasal
2024-10-29 18:34:54451semak imbas

How does the scope of named exceptions differ between Python 2.x and 3.x?

Skop Pengecualian dan Menetapkan Pengecualian Terikat dalam Python

Dalam Python, adalah penting untuk memahami skop pengecualian yang dinamakan selepas blok kecuali disimpulkan. Ini menjadi jelas apabila membandingkan tingkah laku Python 2.x dan 3.x.

Gelagat Python 3.x: NameError dan UnboundLocalError

Dalam Python 3.x, cuba untuk akses pengecualian yang dinamakan dalam blok except di luar blok itu menghasilkan sama ada NameError (jika diakses di luar fungsi) atau UnboundLocalError (jika diakses di dalam fungsi).

Sebab Perubahan

Perubahan ini disebabkan oleh keputusan Python 3.x untuk mengehadkan skop pengecualian yang dinamakan secara eksplisit dalam klausa kecuali. Ini adalah untuk mengelakkan rujukan pekeliling dan mengelakkan keperluan untuk membersihkan jejak balik secara eksplisit.

Penyelesaian

Untuk mengakses pengecualian di luar blok kecuali, ia perlu diikat semula ke nama baru. Contohnya:

<code class="python">exc = None
try:
    raise Exception
except Exception as exc:
    exc = exc # Rebinding to a new name</code>

Pembersihan Jejak Balik Eksplisit

Jika dikehendaki, adalah mungkin untuk mengosongkan jejak balik secara eksplisit selepas mengikat semula pengecualian:

<code class="python">exc = None
try:
    raise Exception("foo")
except Exception as e:
    exc = e
    exc.__traceback__ = None</code>

Berbeza dengan Python 2.x

Dalam Python 2.x, pengecualian tidak mengandungi rujukan kepada surih baliknya, jadi had skop ini tidak diperlukan. Akibatnya, memberikan pengecualian kepada pembolehubah selepas blok kecuali tidak mempunyai akibat negatif.

Atas ialah kandungan terperinci Bagaimanakah skop pengecualian yang dinamakan berbeza antara Python 2.x dan 3.x?. 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