Menangkap SyntaxErrors daripada Kod Dinilai
Apabila melaksanakan kod dalam atur cara Python, ralat sintaks boleh berlaku. Biasanya, ralat ini dibangkitkan semasa fasa kompilasi awal, menghalang kod daripada dilaksanakan. Walau bagaimanapun, terdapat keadaan tertentu di mana ralat sintaks boleh dibangkitkan selepas penyusunan selesai.
Menangkap SyntaxErrors selepas Penyusunan
Coretan kod berikut menunjukkan percubaan untuk menangkap SyntaxError yang dibangkitkan oleh pengkompil:
<code class="python">try: a+a=a except SyntaxError: print("first exception caught")</code>
Walau bagaimanapun, percubaan ini tidak akan berjaya. SyntaxError yang dibangkitkan oleh pengkompil dikendalikan sebelum sebarang cubaan/kecuali blok boleh diwujudkan.
Menangkap SyntaxErrors daripada Kod Dinilai
Sebaliknya, pertimbangkan coretan kod ini:
<code class="python">try: eval("a+a=a") except SyntaxError: print("second exception caught")</code>
Dalam kes ini, ralat sintaks dibangkitkan semasa penilaian kod yang dihantar ke fungsi eval(). Pengecualian ditangkap oleh blok cuba/kecuali sekeliling, menghasilkan tingkah laku yang diingini.
Mengapa Perbezaannya?
Perbezaan utama antara kedua-dua coretan ini terletak pada susunan operasi. Dalam coretan pertama, ralat sintaks dibangkitkan oleh pengkompil sebelum sebarang cubaan/kecuali blok boleh dibuat. Dalam coretan kedua, kod pertama kali disusun, blok try/except ditubuhkan, dan kemudian panggilan eval() mencetuskan ralat sintaks selepas pengkompil selesai dijalankan.
Oleh itu, untuk menangkap ralat sintaks yang berlaku selepas penyusunan awal, perlu menggunakan teknik yang memaksa pengkompil untuk dijalankan dua kali. Ini boleh dicapai melalui eval(), panggilan kompilasi eksplisit, pernyataan import (selepas menulis kod ke fail berasingan), atau exec() dan execfile().
Atas ialah kandungan terperinci Bolehkah SyntaxErrors Ditangkap Selepas Penyusunan Kod dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!