Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah skop pengecualian yang dinamakan berbeza antara Python 2.x dan 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!