3

Python 2to3 docから:

input:

に変換input(prompt)しますeval(input(prompt))

私は現在、Python 2 で数年間働いた後、Python 3 を学習しようとしています。ツールがevalへの呼び出しの前に挿入される理由inputと、すべての Python 3 コードで挿入する必要があるかどうかを誰か説明してもらえますか?

4

1 に答える 1

7

Python 2 の古い入力動作は削除されました。Python 3 の現在の入力は、以前は raw_input と呼ばれていたものです。raw_input と python 3 の入力は、入力を式として評価しようとする入力とは異なり、常に文字列を返します。

2to3 ツールは、入力を自動的に評価する古い入力に依存しているかどうかを判断する方法がないため、eval を挿入しました。ほとんどすべての有効な Python 式を評価できるため、古い入力動作は誤りと見なされます。そのため、input() を使用するすべての Python プログラムには明らかなセキュリティ ホールがあります。変換後、eval を使用するたびに評価し、コードのその部分が信頼できないユーザー入力を受け取るかどうかを判断する必要があります。

おそらく使い捨てのスクリプトを除いて、決して eval(input()) を使用しないでください。eval をセキュアにする方法はありません。

于 2012-08-29T00:46:40.157 に答える