eval() - Pythonで文字列を式として評価するeval()関数
投稿日 2025年03月11日 更新日 2025年03月11日
Python の `eval()` 関数について、使い方や注意点を詳しく解説します。
`eval()` は文字列として記述された Python の式を評価し、その結果を返す組み込み関数です。数式の計算や、文字列で表された辞書やリストの評価によく使用されます。
基本的な使い方
# 数式の評価
result = eval("2 + 3 * 4")
print(result) # 14
# 変数を含む式の評価
x = 10
result = eval("x * 2")
print(result) # 20
よくある使用例
1. 数学的な式の評価
# 複雑な数式の計算
formula = "3 ** 2 + 4 * 2"
result = eval(formula)
print(result) # 17
2. 文字列で表された辞書やリストの評価
# 文字列の辞書を評価
dict_str = "{'name': 'John', 'age': 30}"
dict_obj = eval(dict_str)
print(type(dict_obj)) # <class 'dict'>
print(dict_obj['name']) # John
# 文字列のリストを評価
list_str = "[1, 2, 3, 4, 5]"
list_obj = eval(list_str)
print(type(list_obj)) # <class 'list'>
注意点とセキュリティリスク
`eval()` の使用には重大なセキュリティリスクが伴うため、以下の点に注意が必要です:
1. 信頼できない入力の評価は避ける
- ユーザー入力を直接 `eval()` に渡すのは危険です
- 悪意のあるコードが実行される可能性があります
2. 代替手段の検討
- 可能な限り `ast.literal_eval()` を使用する
- JSON データの場合は `json.loads()` を使用する
# 安全な代替手段の例
import ast
# ast.literal_eval() の使用
safe_dict = ast.literal_eval("{'name': 'John', 'age': 30}")
推奨される使用方法
# 計算式を安全に評価する例
def safe_eval(expression):
# 許可する演算子と数字のみをチェック
allowed = set("0123456789+-*/(). ")
if not set(expression) <= allowed:
raise ValueError("Invalid characters in expression")
return eval(expression)
try:
result = safe_eval("2 + 3 * 4")
print(result) # 14
except ValueError as e:
print("Error:", e)
まとめ
- `eval()` は文字列として与えられた Python 式を評価する便利な関数です
- 数式の計算や文字列形式のデータ構造の評価に使用できます
- セキュリティリスクを考慮し、信頼できない入力には使用を避けるべきです
- 可能な限り `ast.literal_eval()` などの安全な代替手段を検討しましょう
この関数を適切に使用することで、文字列で表された式を効率的に評価できますが、セキュリティには十分な注意を払う必要があります。
関連記事

新着記事
5
6
7
関連記事
5
6
7


60秒で完了