從eval() 捕獲語法錯誤
考慮以下代碼片段:
<code class="python">try: a+a=a except SyntaxError: print("first exception caught")</code>
<code class="python">try: eval("a+a=a") except SyntaxError: print("second exception caught")</code>
中在第二種情況下,會列印「第二個異常...」語句(捕獲異常),而在第一種情況下則不會。引發的兩個語法錯誤(“SyntaxError1”和“SyntaxError2”)是否不同?有沒有辦法捕捉“SyntaxError1”(從而抑制編譯時錯誤)?
答案
「SyntaxError1」和「SyntaxError2」之間的差異在於它們發生的時間。在建立 try/ except 區塊之前,編譯器會引發“SyntaxError1”,而在設定 try/ except 區塊之後,當編譯器作為 eval() 的一部分執行時,會引發“SyntaxError2”。
為了捕獲語法錯誤,包括“SyntaxError1”,編譯器必須運行兩次。 eval() 是實現此目的的一種方法。其他選項包括:
透過強制編譯器運行兩次,可以捕獲語法錯誤並透過 try/ except 區塊處理它們。
以上是你能在`eval()`之前捕獲語法錯誤嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!