eval()関数は、Pythonで文字列を式として評価する際に使用する組み込み関数です。しかし、セキュリティ上のリスクがあるため、適切な使用方法を理解することが重要です。
eval()関数の基本的な使い方
eval()関数は以下のような形式で使用します:
result = eval(expression)例えば、文字列の数式を計算する場合:
calculation = eval("2 + 3 * 4")
print(calculation) # 出力: 14eval()関数の主な用途
1. 数式の評価
math_expression = "3 ** 2 + 4"
result = eval(math_expression)
print(result) # 出力: 132. リストや辞書の文字列からの変換
list_string = "[1, 2, 3, 4]"
converted_list = eval(list_string)
print(type(converted_list)) # 出力: <class 'list'>eval()関数使用時の注意点
セキュリティリスク
eval()関数は任意のPythonコードを実行できるため、悪意のあるコードが実行される可能性があります:
# 危険な例
user_input = "os.system('rm -rf /')" # 危険なコマンド
eval(user_input) # 絶対に実行しないでください安全な代替手段
1. ast.literal_eval()の使用
import ast
safe_string = "[1, 2, 3]"
result = ast.literal_eval(safe_string)
print(result) # 出力: [1, 2, 3]2. 数式の評価には専用ライブラリの使用
import numexpr
expression = "2 * 3 + 4"
result = numexpr.evaluate(expression)
print(result) # 出力: 10ベストプラクティス
1. 信頼できる入力のみを使用する
2. 可能な限りast.literal_eval()を使用する
3. 数式評価には専用ライブラリを検討する
4. ユーザー入力には決してeval()を使用しない
まとめ
eval()関数は強力な機能を提供しますが、セキュリティリスクを伴います。可能な限り安全な代替手段を使用し、必要な場合のみ慎重に使用することを推奨します。特にWebアプリケーションやユーザー入力を扱う場面では、より安全な代替手段を選択しましょう。