をint型との違いは、私はeval(input(a))
がintに自動的に文字列を変換することを聞いたが、入力時の私のコードPYTHON評価およびそれ以前
age = eval(input("enter age"))
が、私はそれが誤りである01に入力するが、ときに私ならば何でありますコード
age = int(input("enter age"))
01が入力として完全に機能します。それはなぜです?
をint型との違いは、私はeval(input(a))
がintに自動的に文字列を変換することを聞いたが、入力時の私のコードPYTHON評価およびそれ以前
age = eval(input("enter age"))
が、私はそれが誤りである01に入力するが、ときに私ならば何でありますコード
age = int(input("enter age"))
01が入力として完全に機能します。それはなぜです?
eval
は、Pythonの式を評価します。 Python 3では、0
で始まる数字は許可されません(0000
を除く、Why does 000 evaluate to 0 in Python 3?を参照)。 Python 2では、これらは8進数(8進数)として解釈されます。ない方が良いが...(のpython 3ベース8は今、排他的使用Oo
プレフィックス)
int
が、それは(あなたが必要としないこと)複雑な式を評価することはできませんので、変換を整数に文字列を実行し、それにさらされていませんこの先行ゼロ構文。
もう一つの便利な機能は、入力された式は、単純な有資格try/except
ブロックを使用して、整数であるかどうかをチェックできるということです。(あなたはすべての例外から保護しなければならないeval
付き)
while True:
try:
age = int(input("enter age"))
break
except ValueError:
print("Retry!")
アドバイス:システムコールやファイルの削除を含め、の式を評価することができます(評価はと評価されています)、安全性に欠けるため、int
を使用してください。
注:上記のコードは、Python 2ではまだ安全ではありません。のように動作します:input
あなたのモジュールの開始時に簡単なコードでこれに対するあなたのコードを保護することができます:
try:
input = raw_input
except NameError:
pass
ので、pythonの2 input
はもはや到達できないで、代わりにraw_input
を呼び出します。 Python 3はそのコードを無視します。
安全であるだけでなく、 'int'が生成できない場合には再試行することができます。 1 ... –
良い点があります。編集しました –
'eval'は大変複雑な表現をするのに使われるので、' int'は文字列を整数に変換するだけですが、それを理解できますか? 8進数とゼロ構文は何ですか? –
eval()
は、式を検証するために使用されます。 Onは8進数(0から始まる数字)を除いて式と見なされます。 Int()
は、文字列から整数への変換を処理します。 evalの使用を避けるべき理由はたくさんあります。ただ、心に留めておく:
のPython 2.xの
のx = raw_input( 'ここに数値を入力します: '):
のPython 3.xの
のPython 2.xの
セキュリティリスク:
のx =入力( 'ここに番号を入力してください。')
のPython 3.xの
セキュリティリスク: x = eval(入力(ここに数字を入力してください))
また、eval()
はコードを実行する可能性があるため、セキュリティ上のリスクが大きくなる可能性があります。あなたが何をしているのかを明確に理解していないか、アプリケーションを危険にさらす可能性がある場合を除き、私はそれを使用しないことをお勧めします
どのようなセキュリティリスクがありますか?私はプログラミングの初心者です –
多くの異なる例と解説をここで確認することができます(ここではhttps://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html) –
例えば 'import subprocess; eval( "subprocess.run( '私が好きなプログラム)')")は非常に危険であり、ユーザーはおそらくそれを行うことを許可されるべきではありません。したがって、 'eval'には100%信頼できる入力だけを渡すべきです。 – user1747134
@cᴏʟᴅsᴘᴇᴇᴅどのように適切なデュープターゲットですか?このリンクは、主要なゼロ問題を説明していません。 – vaultah
彼はpythonの重複を知っていますか?問題は良いです。 –
さて、みんな、再開。 –