2016-04-29 15 views
2

Ich bin neu bei Python und habe versucht, ein kleines Testspiel zu machen, aber wenn ich mein Programm in CMD starte, gibt es diesen Fehler.Python-Code funktioniert nicht in CMD, funktioniert aber in IDLE?

What Is Your Name? 
Test 
Traceback (most recent call last): 
    File "C:\Users\User\Documents\Python Games\Test.py", line 2, in <module> 
    myName = input() 
    File "<string>", line 1, in <module> 
NameError: name 'Test' is not defined 

Obwohl dies in IDLE funktioniert. Dies ist der Anfang des Codes.

print('What Is Your Name?') 
myName = input() 
print('Hello '+str(myName)+' It is good to meet you!') 
+0

Es klingt wie Sie IDLE von Python3 verwenden, aber das Skript verwendet Python2. Sie müssen 'raw_input()' in python2 verwenden. – Barmar

+0

Ich benutze Python 3, wenn ich raw_input() setze, wird mir gesagt, dass es nicht definiert ist. – 0Bennyman

+0

Das ist richtig. In Python 3 hat 'input()' das, was 'raw_input()' in Python 2 getan hat. Sie müssen sicherstellen, dass das Skript mit Python 3 ausgeführt wird. – Barmar

Antwort

2

Es ist wegen der Python-Version ändern. Sie haben wahrscheinlich zwei Pythons installiert. Python2.x befindet sich im PATH. Und du hast Python 3.x IDLE.

NameError: name 'Test' is not defined ist, weil sein Python 2.x

ändern myName = input()-myName = raw_input().

Und es wäre in Python 2.x funktionieren

Ihre IDLE-Version muss Python 3.x sein, wo es keine raw_input() ist.

+0

Ja, ich habe Python 2 aus Versehen benutzt, musste nur den Pfad zu Python 3 ändern und jetzt funktioniert alles, danke für die Hilfe! – 0Bennyman

+0

@ 0Bennyman gut zu wissen, dass es geholfen hat. –

0

Erklärung

dort gewesen wenig Änderungen zwischen Python 2.x und Python 3.x.

Einer von ihnen ist die Änderung der input Funktion.

In Python 2 bewertet die input-Funktion, was der Benutzer eingibt. Diese Funktion wird verwendet, wenn der Benutzer eine Nummer eingeben muss. Es wird geparst und die Variable, die den Rückgabewert input enthält, ist vom Typ numerisch (float oder int).

https://docs.python.org/2/library/functions.html#input

In Ihrem Fall, da der Name des Benutzers wahrscheinlich keine Zahl ist, und wenn Sie mit Python arbeiten 2, können Sie die Funktion raw_input, die die Eingabe des Benutzers als Rück String verwenden sollten ohne zu analysieren. Wenn der Benutzer eine Zahl eingibt, wird der String mit dieser Nummer zurückgegeben.

https://docs.python.org/2/library/functions.html#raw_input

Aus Sicherheitsgründen werden die input Funktion von Python 2 ist nicht zu verwenden, zu empfehlen, da die Funktion die Eingabe auswerten, und obwohl es für das Parsen von Zahlen ohne Guss sehr bequem ist, sondern ermöglicht auch den Benutzer zu injizieren bösartiger Code in Ihre Anwendung;)

>>> print str(input("Enter your name: ")) 
Enter your name: __import__('os').listdir('.') 
['super_secret.txt'] 

Somit wird die Eingabefunktion durch die raw_input Funktion in Python 3 und die raw_input Funktion entfernt wurde, ersetzt.

Fix

Ich denke, dass das Standardverhalten Ihres os ist python2 zu rufen, wenn Sie python ausführen möchten.Also, wenn Sie python3 ausführen möchten, müssen Sie es sagen ausdrücklich:

Ihre IDE scheint korrekt konfiguriert zu sein, um python3 als Standardinterpreter zu verwenden.

Verwandte Themen