Ich erhalte eine Fehlermeldung, wenn ich versuche, dieses einfache Python-Skript auszuführen:
input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)
Sagen wir, ich gebe "Dude" ein. Der Fehler, den ich erhalte, ist:
line 1, in <module>
input_variable = input ("Enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'dude' is not defined
Ich verwende Mac OS X 10.9.1 und verwende die Python Launcher-App, die mit der Installation von Python 3.3 geliefert wurde, um das Skript auszuführen.
Edit: Mir wurde klar, dass ich diese Skripte irgendwie mit 2.7 laufen lasse. Ich denke, die eigentliche Frage ist, wie ich meine Skripte mit Version 3.3 ausführen kann. Ich dachte, wenn ich meine Skripte auf die Python Launcher-App im Ordner Python 3.3 in meinem Anwendungsordner gezogen habe, würde sie meine Skripts mit 3.3 starten. Ich vermute, diese Methode startet immer noch Skripte mit 2.7. Wie verwende ich 3.3?
TL; DR
Die input
-Funktion in Python 2.7 wertet Ihre Eingaben als Python-Ausdruck aus. Wenn Sie nur Strings lesen möchten, verwenden Sie in Python 2.7 die Funktion raw_input
, die die gelesenen Strings nicht auswertet.
Wenn Sie Python 3.x verwenden, wurde raw_input
in input
umbenannt. Zitieren der Python 3.0 Versionshinweise ,
raw_input()
wurde ininput()
umbenannt. Das heißt, die neueinput()
-Funktion liest eine Zeile aussys.stdin
und gibt sie mit abgehender Zeile zurück.EOFError
wird ausgelöst, wenn die Eingabe vorzeitig beendet wird. Um das alte Verhalten voninput()
zu erhalten, verwenden Sieeval(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 einen String vom Benutzer und wertet den String im aktuellen Python-Kontext aus. Wenn ich dude
als Eingabe eingebe, wird festgestellt, dass dude
an den Wert thefourtheye
gebunden ist. Das Ergebnis der Auswertung wird also zu thefourtheye
und wird input_variable
zugewiesen.
Wenn ich etwas anderes eingebe, das im aktuellen Python-Kontext nicht vorhanden ist, schlägt die NameError
fehl.
>>> 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 mit Python 2.7 input
:
Da alle Benutzertypen ausgewertet werden, sind auch Sicherheitsprobleme erforderlich. Wenn Sie beispielsweise os
-Modul mit import os
in Ihr Programm geladen haben, tippen Sie den Benutzer ein
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 erneut, die Funktion input
auszuführen.
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
Wenn nun input("Enter your name: ")
ausgeführt wird, wartet es auf die Benutzereingabe und die Benutzereingabe ist ein gültiger Aufruf der Python-Funktion und wird daher auch aufgerufen. Deshalb sehen wir wieder Enter your name again:
Prompt.
Mit der raw_input
-Funktion sind Sie also besser aufgehoben
input_variable = raw_input("Enter your name: ")
Wenn Sie das Ergebnis in einen anderen Typ konvertieren müssen, können Sie die von raw_input
zurückgegebene Zeichenfolge mit entsprechenden Funktionen konvertieren. Um beispielsweise Eingaben als Ganzzahlen zu lesen, verwenden Sie die Funktion int
, wie in diese Antwort gezeigt.
In python 3.x gibt es nur eine Funktion zum Abrufen von Benutzereingaben, die als input
bezeichnet wird, was dem raw_input
von Python 2.7 entspricht.
Sie verwenden Python 2, nicht Python 3. Verwenden Sie raw_input
, um dies in Python 2 zu verwenden.
input_variable = raw_input ("Enter your name: ")
print ("your name is" + input_variable)
Da Sie für Python 3.x schreiben, beginnen Sie Ihr Skript mit:
#!/usr/bin/env python3
Wenn du benutzt:
#!/usr/bin/env python
Es wird standardmäßig Python 2.x verwendet. Diese stehen in der ersten Zeile Ihres Skripts, wenn nichts mit # beginnt! (auch bekannt als Shebang).
Beginnen Sie Ihre Skripte mit:
#! python
Dann können Sie es ändern in:
#! python3
Obwohl diese kürzere Formatierung nur von wenigen Programmen wie dem Launcher erkannt wird, ist sie nicht die beste Wahl.
Die ersten beiden Beispiele werden viel häufiger verwendet und sorgen dafür, dass Ihr Code auf jedem Computer funktioniert, auf dem Python installiert ist.
sie sollten raw_input verwenden, da Sie python-2.7 verwenden. Wenn Sie input () für ein Variablenbeispiel verwenden: s = input ('Name:') führt den Befehl auf der Python-Umgebung aus, ohne zu speichern, was Sie für die Variable geschrieben haben (s) und Erstellen eines Fehlers Wenn Sie das, was Sie geschrieben haben, nicht definiert hat, können Sie raw_input () verwenden. Dies speichert das, was Sie über die Variable geschrieben haben. Beispiel: f = raw_input ('Name:') und nicht Führen Sie es in der Python-Umgebung aus, ohne mögliche Fehler zu erstellen
input_variable = raw_input('Enter Your Name : ')
print("Your Name Is : " + (input_variable))
Für Python 3 und höher
s = raw_input()
es wird das Problem auf der pycharm IDE. lösen. Wenn Sie auf der Online-Site genau hackerrank lösen, dann verwenden Sie:
s = input()
Sie könnten entweder tun:
x = raw_input("enter your name")
print "your name is %s " % x
oder:
x = str(input("enter your name"))
print "your name is %s" % x
input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)
Sie müssen entweder einfache oder doppelte Anführungszeichen eingeben
Ex:'dude' -> correct
dude -> not correct
Für alle anderen Personen, die möglicherweise auf dieses Problem stoßen, stellt sich heraus, dass Shebang ignoriert wird, auch wenn Sie #!/usr/bin/env python3
am Anfang Ihres Skripts enthalten, wenn die Datei nicht ausführbar ist.
So stellen Sie fest, ob Ihre Datei ausführbar ist oder nicht:
./filename.py
von der Befehlszeile aus-bash: ./filename.py: Permission denied
erhalten, führen Sie chmod a+x filename.py
aus../filename.py
erneut ausWenn Sie import sys; print(sys.version)
als Kevin vorgeschlagen haben, sehen Sie jetzt, dass das Skript von python3 interpretiert wird
Wir verwenden das Folgende, das sowohl Python 2 als auch Python 3 funktioniert.
#Works in Python 2 and 3:
try: input = raw_input
except NameError: pass
print(input("Enter your name: "))
Sie können den Python, den Sie mit Ihrer IDE verwenden, ändern. Wenn Sie Python 3.x bereits heruntergeladen haben, sollte das Wechseln nicht zu schwierig sein. Aber Ihr Skript funktioniert gut mit Python 3.x, ich würde es einfach ändern
print ("your name is" + input_variable)
zu
print ("your name is", input_variable)
Denn mit dem Komma wird mit einem Leerzeichen zwischen your name is
und dem, was der Benutzer eingibt, gedruckt. UND: Wenn Sie 2.7 verwenden, verwenden Sie einfach raw_input
anstelle der Eingabe.
Dieses Problem trat auch bei einem Modul auf, das mit Python 2.7 und 3.7 kompatibel sein sollte
was ich gefunden habe, um das Problem zu beheben, war der Import:
from six.moves import input
damit wurde die Benutzerfreundlichkeit für beide Dolmetscher festgelegt
sie können mehr über die sechs Bibliothek lesen hier
Gute Beiträge der Vorgänger.
import sys; print(sys.version)
def ingreso(nombre):
print('Hi ', nombre, type(nombre))
def bienvenida(nombre):
print("Hi "+nombre+", bye ")
nombre = raw_input("Enter your name: ")
ingreso(nombre)
bienvenida(nombre)
#Works in Python 2 and 3:
try: input = raw_input
except NameError: pass
print(input("Your name: "))
Geben Sie Ihren Namen ein: Joe ('Hi', 'Joe', & lttype 'str'>) Hallo Joe, Tschüss Ihr Name: Joe Joe
Vielen Dank!