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()` などの安全な代替手段を検討しましょう
この関数を適切に使用することで、文字列で表された式を効率的に評価できますが、セキュリティには十分な注意を払う必要があります。
Resumy AI監修者
監修者: RESUMY.AI編集部

ヨーロッパのテックハブであるロンドンにて、シニアデベロッパーとしてチームを率いた後、オンライン教育プラットフォームUdemyでモダン技術に関する講義を配信する「Daiz Academy」を設立。現在はAIテクノロジー企業 Chott, Inc.を運営しています。

監修者: RESUMY.AI編集部
Resumy AI監修者

ヨーロッパのテックハブであるロンドンにて、シニアデベロッパーとしてチームを率いた後、オンライン教育プラットフォームUdemyでモダン技術に関する講義を配信する「Daiz Academy」を設立。現在はAIテクノロジー企業 Chott, Inc.を運営しています。

AI職務経歴書作成サービス RESUMY.AIAI職務経歴書作成サービス RESUMY.AI
60秒で完了