2016-06-19 7 views
5

は、私はこのように、ユーザからの整数入力を受け付けるように簡単なコマンドを記述します。Pythonのeval(input( "Enter input:"))が入力のデータ型を変更するのはなぜですか? Pythonの3では

x = int(input("Enter a number: ")) 

私はint()部分をスキップし、単にx = input("Enter a number: ")を使用している場合は、私の入力のデータ型が文字列ではなく整数です。という事は承知しています。私は、次のコマンドを使用している場合

しかし、:

x = eval(input("Enter a number: ")) 

入力のデータ型は 'int型' です。

どうしてですか?

+0

eval()を使用すると、動的なチェックが行われる可能性がありますか? – cssGEEK

+0

'eval'はコードで書かれたように入力を扱い、コード中で' x = 3'を実行すると整数になります。したがって 'x = eval(" 3 ")'はxを整数にしますが、 'open(__ file __、 'w')。close()'をタイプすると、現在の実行ファイルが削除されます。 –

答えて

5

どうしてですか?

x = eval(input("Enter a number: "))x = eval('input("Enter a number: ")')

と同じものではかつての最初の呼び出しinput(...)ないが、例えば、文字列を取得します'5'あなたはintを取得する理由は、このように、だ、それを評価します。

>>> eval('5') # the str '5' is e.g. the value it gets after calling input(...) 
5 # You get an int 

(より多くのあなたが期待していたものと整合し)、後者は、数あるので表現'input("Enter a number: ")'

>>> x = eval('input("Enter a number: ")') 
Enter a number: 5 
>>> x 
'5' # Here you get a str 
0

を評価しながらPythonで有効な式であり、それ自身(そしてその型はint)に評価されます。たとえば、存在しない名前(例えば、 'abcdefgh')のゴミ文字列を入力すると、NameError例外が発生します(評価中に例外が発生します)。

関連する問題