eval() 式を実行する
最終更新:2026-09-22
eval() 式を実行する
eval() は文字列中の Python 式を実行し、結果を返す。**セキュリティ警告**:信頼できない入力を eval で処理してはならない。
| カテゴリ | 組み込み関数 |
|---|---|
| 種類 | 組み込み関数 |
| Python バージョン | all |
📝 構文
eval(expression[, globals[, locals]])
⚙️ 引数
| expression 必須 | A Python expression string or code object. |
|---|---|
| globals 任意 | The global namespace dict.(デフォルト値:None) |
| locals 任意 | The local namespace dict.(デフォルト値:None) |
戻り値:The result of evaluating the expression.
💥 例外
SyntaxError— Raised when the expression has a syntax error.NameError— Raised when the expression references an undefined name.TypeError— Raised when globals or locals is not a dict.
▶ 例
下のコードを編集し「実行」をクリックすると、出力パネルに結果が表示されます:
実行結果:
15
1024
⚠️ 警告 eval は任意のコードを実行できるため、本番環境では ast.literal_eval で代替すること。
🏷️ 関連する組み込み関数
💡 関連するケース
さらに多くのケースは近日公開予定です。
❓ よくある質問
Qeval() と exec() の違いは何ですか?
Aeval() は単一の式だけを実行し、その結果を返します(例:eval('1 + 2') は 3)。exec() は文やコードブロック(if、for、def など)を実行し、None を返します。
Qeval('x = 1') はどうなりますか?
ASyntaxError になります。代入は文であって式ではないため、eval() は式を評価するだけです。文を実行したいなら exec() を使います。
Qなぜユーザー入力に eval を使うべきではないのですか?
Aeval() は任意のコードを実行できます。eval("__import__('os').system('dir')") のような文字列などです。ユーザー入力を解析するなら、リテラルだけを扱う ast.literal_eval を使ってください。
Qeval 内で外部で定義した変数を使えますか?
A既定では使えます(現在のグローバル/ローカル名前空間を使うため)。また globals/locals 引数でカスタム名前空間を渡し、式がアクセスできる名前を制限できます。