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>
In 2 番目のケースでは、「2 番目の例外 ... 」ステートメントが出力されます (例外がキャッチされます)。一方、最初のケースでは出力されません。発生した 2 つの構文エラー (「SyntaxError1」と「SyntaxError2」) は異なりますか? "SyntaxError1" をキャッチする (コンパイル時エラーを抑制する) 方法はありますか?
回答
"SyntaxError1" と "SyntaxError2" の違いは、それらの発生のタイミング。 "SyntaxError1" は、try/Except ブロックが作成される前にコンパイラによって発生しますが、"SyntaxError2" は、try/Except ブロックが設定された後、コンパイラが eval() の一部として実行されるときに発生します。
「SyntaxError1」を含む構文エラーを検出するには、コンパイラを 2 回実行する必要があります。 eval() はこれを実現する 1 つのメソッドです。その他のオプションには次のものがあります。
コンパイラを強制的に 2 回実行することにより、構文エラーを捕捉し、try/Except ブロックを通じてそれらを処理することが可能になります。
以上が「eval()」の前に構文エラーを見つけることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。