Pengendalian Pengecualian dan Skop Pembolehubah dalam Python
Apabila menggunakan pengecualian bernama dalam Python, pembangun mungkin menghadapi ralat seperti NameError atau UnboundLocalError apabila cuba untuk akses pengecualian di luar blok kecuali. Tingkah laku ini timbul daripada skop eksplisit pengecualian terikat dalam pernyataan percubaan.
Dalam Python 3, pengecualian terikat secara automatik dikosongkan pada penghujung klausa kecuali untuk mengelakkan kebocoran memori tidak sengaja yang disebabkan oleh rujukan bulat dengan bingkai tindanan . Oleh itu, pengecualian mesti diberikan kepada nama lain untuk diakses kemudian. Tugasan seperti exc = exc tidak akan mencukupi.
Dalam Python 2, penjelasan ini tidak diperlukan kerana ketiadaan rujukan jejak balik. Walau bagaimanapun, walaupun dalam Python 2, amaran telah diberikan tentang mengelakkan rujukan bulat.
Untuk menyelesaikan isu ini, anda mempunyai dua pilihan. Satu pendekatan adalah untuk mengikat semula pengecualian kepada nama berasingan dalam blok kecuali, memastikan bahawa nama baharu ini tidak berada dalam skop pernyataan cuba.
try: raise Exception("foo") except Exception as e: my_exception = e
Sebagai alternatif, jika anda tidak memerlukan akses kepada jejak pengecualian, anda boleh mengosongkannya secara eksplisit untuk mengelakkan kemungkinan kebocoran memori.
try: raise Exception("foo") except Exception as e: exc = e exc.__traceback__ = None
Ingat, langkah ini penting untuk memastikan pengurusan memori dan pengendalian pengecualian yang betul dalam Python. Rujukan dan pembersihan pengecualian yang betul akan menghalang kebocoran memori dan membantu mengekalkan kestabilan kod.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Pengecualian di Luar Blok `kecuali` dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!