TL; DR
input
Die Funktion in Python 2.7 wertet Ihre Eingabe als Python-Ausdruck aus. Wenn Sie nur Zeichenfolgen lesen möchten, verwenden Sie die raw_input
Funktion in Python 2.7, mit der die gelesenen Zeichenfolgen nicht ausgewertet werden.
Wenn Sie Python 3.x verwenden, raw_input
wurde in umbenannt input
. Zitieren der Python 3.0- Versionshinweise ,
raw_input()
wurde umbenannt in input()
. Das heißt, die neue input()
Funktion liest eine Zeile aus sys.stdin
und gibt sie zurück, wobei die nachfolgende neue Zeile entfernt wird. Es wird ausgelöst, EOFError
wenn die Eingabe vorzeitig beendet wird. input()
Verwenden Sie, um das alte Verhalten von zu erhalteneval(input())
In Python 2.7 gibt es zwei Funktionen, mit denen Benutzereingaben akzeptiert werden können. Einer ist input
und der andere ist raw_input
. Sie können sich die Beziehung zwischen ihnen wie folgt vorstellen
input = eval(raw_input)
Betrachten Sie den folgenden Code, um dies besser zu verstehen
>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'
input
Akzeptiert eine Zeichenfolge vom Benutzer und wertet die Zeichenfolge im aktuellen Python-Kontext aus. Wenn ich dude
als Eingabe eingebe, wird festgestellt, dass dies dude
an den Wert gebunden ist thefourtheye
und das Ergebnis der Auswertung wird thefourtheye
und dem zugewiesen wird input_variable
.
Wenn ich etwas anderes eingebe, das im aktuellen Python-Kontext nicht vorhanden ist, schlägt dies fehl NameError
.
>>> input("Enter your name: ")
Enter your name: dummy
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'dummy' is not defined
Sicherheitsüberlegungen zu Python 2.7 input
:
Da alle Benutzertypen ausgewertet werden, entstehen auch Sicherheitsprobleme. Zum Beispiel, wenn Sie bereits ein os
Modul in Ihr Programm geladen haben import os
und der Benutzer dann eingibt
os.remove("/etc/hosts")
Dies wird von Python als Funktionsaufrufausdruck ausgewertet und ausgeführt. Wenn Sie Python mit erhöhten Berechtigungen ausführen, wird die /etc/hosts
Datei gelöscht. Sehen Sie, wie gefährlich es sein könnte?
Um dies zu demonstrieren, versuchen wir input
erneut , die Funktion auszuführen .
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
Wenn input("Enter your name: ")
es jetzt ausgeführt wird, wartet es auf die Benutzereingabe und die Benutzereingabe ist ein gültiger Python-Funktionsaufruf und wird daher auch aufgerufen. Deshalb sehen wir Enter your name again:
wieder prompt.
Mit dieser raw_input
Funktion sind Sie also besser dran
input_variable = raw_input("Enter your name: ")
Wenn Sie das Ergebnis in einen anderen Typ konvertieren müssen, können Sie die von zurückgegebene Zeichenfolge mithilfe geeigneter Funktionen konvertieren raw_input
. Verwenden Sie beispielsweise die int
in dieser Antwort gezeigte Funktion, um Eingaben als Ganzzahlen zu lesen .
In Python 3.x gibt es nur eine Funktion zum Abrufen von Benutzereingaben, die aufgerufen input
wird und Python 2.7 entspricht raw_input
.
input
, dass ich mich so verhalte, aber nur in 2.7. Was sagt es aus, wenn Siepython --version
an einer Eingabeaufforderung ausgeführt werden? Was ist alternativ, wenn Sieimport sys; print(sys.version)
am Anfang Ihres Skripts schreiben ?