Was ist der Unterschied zwischen raw_input()
und input()
in Python 3?
input
zu raw_input
und Namen Fehler ignorieren.
Was ist der Unterschied zwischen raw_input()
und input()
in Python 3?
input
zu raw_input
und Namen Fehler ignorieren.
Antworten:
Der Unterschied besteht darin, dass raw_input()
dies in Python 3.x nicht vorhanden input()
ist. Eigentlich wurde das Alte raw_input()
in umbenannt input()
und das Alte input()
ist weg, kann aber einfach mit simuliert werden eval(input())
. (Denken eval()
Sie daran, dass dies böse ist. Versuchen Sie, Ihre Eingaben nach Möglichkeit sicherer zu analysieren.)
raw_input
...?" - "Der Unterschied ist, dass es keine gibt raw_input
." ... Ein drastischer Unterschied, würde ich sagen!
eval
(und exec
) generell vermieden werden sollten, da sie ein Sicherheitsrisiko darstellen können. Für Details siehe Eval ist wirklich gefährlich von SO-Veteran Ned Batchelder. Und dieser Rat gilt natürlich auch für das alte Python 2 input
.
eval()
und exec()
, aber Sie müssen zuerst verstehen, warum Sie sie nicht verwenden sollten, eval()
bevor Sie sich für die Verwendung entscheiden.
In Python 2 , raw_input()
gibt eine Zeichenfolge, und input()
versucht , den Eingang als Python Ausdruck auszuführen.
Da das Erhalten eines Strings fast immer das war, was Sie wollten, macht Python 3 das mit input()
. Wie Sven sagt, wenn Sie jemals das alte Verhalten wollen, eval(input())
funktioniert.
raw_input()
.
raw_input()
Nimmt genau das, was der Benutzer eingegeben hat, und gibt es als Zeichenfolge zurück.
input()
nimmt zuerst das raw_input()
und führt dann auch ein eval()
drauf durch.
Der Hauptunterschied besteht darin, input()
dass eine syntaktisch korrekte Python-Anweisung erwartet wird, wo raw_input()
dies nicht der Fall ist.
raw_input()
wurde umbenannt in gibt input()
jetzt input()
die genaue Zeichenfolge zurück.input()
wurde entfernt.Wenn Sie die alte verwenden möchten input()
, dh eine Benutzereingabe als Python-Anweisung auswerten müssen, müssen Sie dies manuell mithilfe von tun eval(input())
.
In Python 3 raw_input()
existiert nicht, was bereits von Sven erwähnt wurde.
In Python 2 input()
wertet die Funktion Ihre Eingabe aus.
Beispiel:
name = input("what is your name ?")
what is your name ?harsha
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
name = input("what is your name ?")
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
Im obigen Beispiel versucht Python 2.x, Harsha als Variable und nicht als Zeichenfolge auszuwerten. Um dies zu vermeiden, können wir um unsere Eingabe doppelte Anführungszeichen wie "harsha" verwenden:
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
raw_input ()
Die Funktion raw_input () `wertet nicht aus, sondern liest nur, was Sie eingeben.
Beispiel:
name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'
Beispiel:
name = eval(raw_input("what is your name?"))
what is your name?harsha
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
name = eval(raw_input("what is your name?"))
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
Im obigen Beispiel habe ich nur versucht, die Benutzereingaben mit der eval
Funktion auszuwerten .
Ich möchte der Erklärung, die jeder für die Python 2-Benutzer gibt, etwas mehr Details hinzufügen . raw_input()
Inzwischen wissen Sie, dass alle vom Benutzer eingegebenen Daten als Zeichenfolge ausgewertet werden. Dies bedeutet, dass Python nicht einmal versucht, die eingegebenen Daten erneut zu verstehen. Es wird lediglich berücksichtigt, dass die eingegebenen Daten Zeichenfolgen sind, unabhängig davon, ob es sich um eine tatsächliche Zeichenfolge oder int oder etwas anderes handelt.
Während input()
andererseits versucht, die vom Benutzer eingegebenen Daten zu verstehen. Die Eingabe wie helloworld
würde den Fehler sogar als ' helloworld is undefined
' anzeigen.
Um in Python 2 auch eine Zeichenfolge einzugeben, müssen Sie diese wie ' helloworld
' eingeben. Dies ist die in Python übliche Struktur zur Verwendung von Zeichenfolgen.
Wenn Sie sicherstellen möchten, dass Ihr Code mit Python2 und Python3 ausgeführt wird, verwenden Sie die Funktion input () in Ihrem Skript und fügen Sie diese hinzu, um mit dem Skript zu beginnen:
from sys import version_info
if version_info.major == 3:
pass
elif version_info.major == 2:
try:
input = raw_input
except NameError:
pass
else:
print ("Unknown python version - input function not safe")