Warum Python eval(input("Geben Sie ein: ")) ändern Sie die input Datentyp?
In Python 3, ich Schreibe einen einfachen Befehl zu akzeptieren, die ein integer-Eingabe durch den Benutzer so:
x = int(input("Enter a number: "))
Wenn ich überspringen Sie die int()
Teil und nutzen Sie einfach x = input("Enter a number: ")
mein input Datentyp ist ein string, kein integer. Ich verstehe, dass.
Jedoch, wenn ich den folgenden Befehl verwenden:
x = eval(input("Enter a number: "))
die Eingabe der Datentyp 'int'.
Warum geschieht dies?
- vielleicht ist es eine dynamische Typüberprüfung, wenn Sie mit eval()?
eval
behandelt den input, wie es im code geschrieben, tutx = 3
im code ist eine Ganzzahl, alsox = eval("3")
wird auch x eine ganze Zahl, jedoch lassen dem Benutzer die Eingabe von beliebigem code als Eingabe kann ein großes problem werden, wenn Sie eingegeben haben, inopen(__file__,'w').close()
würde es löschen Sie die aktuelle Datei ausführen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
x = eval(input("Enter a number: "))
ist nicht das gleiche wiex = eval('input("Enter a number: ")')
Den ehemaligen ersten Anrufe
input(...)
, erhält einen string, z.B.'5'
dann wertet es, das ist, warum Sie bekommen eineint
auf diese Art und Weise:Während die letzteren (mehr ausgerichtet, was Sie erwartet hatten), wertet den Ausdruck aus
'input("Enter a number: ")'
Da eine Zahl ein Gültiger Ausdruck in Python, und es ergibt sich (und sein Typ ist int). Beispielsweise, wenn Sie input a Müll string mit einem nicht-existierenden Namen (sagen wir, 'abcdefgh'), wird eine NameError-Ausnahme ausgelöst wird (die Ausnahme wird ausgelöst, während der Auswertung).