compile() ソースコードをコードオブジェクトにコンパイルする
最終更新:2026-09-22
compile() ソースコードをコードオブジェクトにコンパイルする
compile() はソースコード文字列をコードオブジェクトにコンパイルし、exec() / eval() に渡して実行できる。
| カテゴリ | 組み込み関数 |
|---|---|
| 種類 | 組み込み関数 |
| Python バージョン | all |
📝 構文
compile(source, filename, mode)
⚙️ 引数
| source 必須 | Source code: a string, bytes, or AST object. |
|---|---|
| filename 必須 | Filename shown in error messages; pass ' |
| mode 必須 | Compilation mode: 'exec', 'eval', or 'single'. |
| flags 任意 | Compiler flags, e.g. ast.PyCF_ONLY_AST.(デフォルト値:0) |
| dont_inherit 任意 | Whether to ignore surrounding compile flags.(デフォルト値:False) |
| optimize 任意 | Optimization level; -1 uses the interpreter's setting.(デフォルト値:-1) |
戻り値:A code object executable by exec() / eval().
💥 例外
SyntaxError— Raised when the source has a syntax error.ValueError— Raised when mode is invalid or the source contains null bytes.TypeError— Raised when source or mode has an invalid type.
▶ 例
下のコードを編集し「実行」をクリックすると、出力パネルに結果が表示されます:
実行結果:
3
🏷️ 関連する組み込み関数
💡 関連するケース
さらに多くのケースは近日公開予定です。
❓ よくある質問
Qcompile() の3つの mode の違いは何ですか?
A'exec' は文ブロック(if、def、for など)をコンパイルします。'eval' は単一の式(値を評価できるもの)をコンパイルします。'single' は単一の対話的文をコンパイルし、式の結果を表示します。
Qfilename 引数には何を渡しますか?
A動的に生成したインラインコードでは、慣例として '' を渡します。これはエラーメッセージ(トレースバック)にだけ現れ、実際のファイルとは無関係です。実際にファイルを読み取ることはありません。
Qcompile() の後、結果をどう実行しますか?
A返された code オブジェクトを exec(code) または eval(code) に渡します。'exec' モードでコンパイルしたコードは exec で、'eval' モードのものは eval で実行します。
Qソースに構文エラーがあるとどうなりますか?
Acompile() の段階で SyntaxError が投げられます。文字列を直接 exec するよりも早く問題を検出できるため、「先にコンパイル検証、後から実行」の場面に適しています。