[解決済み】pythonのeval()とast.literal_eval()の使い分けについて)
2022-04-05 21:16:50
質問
あるコードで、以下のような状況があります。
eval()
が解決策になりそうです。 現在、私はこれまで
eval()
しかし、この方法が引き起こす潜在的な危険性については、多くの情報を目にすることができました。 そのため、私はこれを使うことに非常に慎重になっています。
私の状況は、ユーザーからの入力があることです。
datamap = input('Provide some data here: ')
ここで
datamap
は辞書である必要があります。 いろいろ検索してみると
eval()
は、これを解決することができました。データを使おうとする前に入力の型を確認することができ、セキュリティ対策として有効なのではないかと思いました。
datamap = eval(input('Provide some data here: ')
if not isinstance(datamap, dict):
return
ドキュメントに目を通しましたが、これが安全かどうかまだ不明です。 evalはデータが入力されるとすぐに評価するのか、それとも
datamap
変数が呼び出されるのでしょうか?
は
ast
モジュールの
.literal_eval()
が唯一の安全な選択肢なのか?
解決方法は?
datamap = eval(input('Provide some data here: '))
は、実際にコードを評価することを意味します。
前に
安全でないかどうかを判断します。関数が呼び出されると同時にコードを評価するのです。以下も参照してください。
の危険性
eval
.
ast.literal_eval
は入力が有効な Python データ型でない場合に例外を発生させるので、入力が有効でない場合はコードは実行されません。
使用方法
ast.literal_eval
が必要な場合は
eval
. 通常、リテラルなPython文は評価しない方がよいでしょう。
関連
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Pythonのsuper()は多重継承でどう動くのか?
-
[解決済み] Pythonのif文における&&(論理和)に相当する機能
-
[解決済み] なぜJavaScriptのeval関数を使うとダメなのか?
-
[解決済み] eval、exec、compileの違いは何ですか?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】Pythonのeval()は何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
任意波形を生成してtxtで保存するためのPython実装
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み] Pythonで文字列中のエスケープシーケンスを処理する