「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > eval されたコードでは構文エラーを検出できるのに、ソース コードでは構文エラーが検出できないのはなぜですか?

eval されたコードでは構文エラーを検出できるのに、ソース コードでは構文エラーが検出できないのはなぜですか?

2024 年 11 月 16 日に公開
ブラウズ:860

Why can I catch syntax errors in eval\'d code but not in my source code?

評価されたコードの構文エラーの処理

Python コードを使用する場合、eval 関数を使用して動的に評価されるコード内で構文エラーが発生する状況が発生することがあります。 。このようなエラーを検出することは可能ですが、ソース コード自体の構文エラーには当てはまりません。

なぜ違いますか?

この動作を理解するには、次のことを覚えておくことが重要です。 Python での実行順序。コードが実行されると、Python コンパイラーはまずコードを解析およびコンパイルしてバイトコードを生成します。このバイトコードは、Python 仮想マシン (PVM) によって解釈されます。

ソース コードに構文エラーがある場合、コンパイラーはエラーを検出し、コンパイル プロセスを停止します。したがって、コード内で定義されている try/excel ブロッ​​クは決して機能しません。

ただし、eval を使用する場合、eval ステートメント内のコードは、周囲のコードの最初のコンパイルの後に個別にコンパイルされます。これは、2 回目のコンパイル実行中に eval ステートメント内の構文エラーが発生することを意味します。 try/excel ブロッ​​クは最初のコンパイル時にすでに確立されているため、評価されたコードによって発生した構文エラーを検出できる可能性があります。

影響

ソースコードはイライラするかもしれません。ただし、これは Python 実装に固有の制限です。コンパイラは、try/Except メカニズムがアクティブになる前に最初の実行を完了する必要があります。

回避策

ソース コード内の構文エラーを処理するには、コンパイル プロセスを複数回トリガーする方法を見つける必要があります。これは、次のような手法を使用して実現できます。

  • eval ステートメントでコードをラップする
  • コンパイル組み込み関数を使用する
  • 別のファイルからコードをインポートする
  • exec または execfile を採用しています
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3