2017-09-02 14 views
0

Ich benutze Python mit DataCamp und Python Anywhere, und sie scheinen nicht übereinstimmen, was ein Syntaxfehler ist. Ich habe vor kurzem gerade erst begonnen, so habe ich versucht, diese Codezeile:Python-Syntaxfehler mit Python Anywhere

n = 5 
while n > 0: 
    print (n) 
    n = n - 1 
print ('Blastoff!') 

Es läuft wie es auf DataCamp angenommen hat, aber mit Python überall, bekomme ich folgende Fehlermeldung:

File "<stdin>", line 5 
    print ("Blastoff!") 
     ^
SyntaxError: invalid syntax 

I don Ich weiß nicht, worauf es verweist oder versucht, es mir zu sagen. Die Fehlermeldung ist nicht hilfreich, und ich weiß nicht, warum ich hier zwei verschiedene Auswertungen bekomme.

+0

Führen Sie python2.x aus? –

+4

@ArpitSolanki: Dies würde in Python 2 funktionieren. –

+0

Führen Sie dies in einem interaktiven Interpreter? Dann müssen Sie eine Leerzeile zwischen der Zeile "n = n - 1" und der Zeile "print" einfügen. –

Antwort

1

Wenn in interaktiven Interpreter einfügen, müssen Sie eine leere Zeile nach einer Blockanweisung haben, bevor die nächste Anweisung. Hier ist die Ausgabe von der Python-Interpreter überall eingebettet auf http://www.python.org:

Python 3.6.0 (default, Jan 13 2017, 00:00:00) 
[GCC 4.8.4] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> n = 5 
>>> while n > 0: 
... print (n) 
... n = n - 1 
... print ('Blastoff!') 
    File "<stdin>", line 4 
    print ('Blastoff!') 
     ^
SyntaxError: invalid syntax 
>>> 

in der ersten Spalte Schreiben etwas ... wird diese SyntaxError verursachen, obwohl legal in einer Quelldatei. Dies liegt daran, dass alle zusammengesetzten Anweisungen nach ihrer Fertigstellung an exec(compile(... 'single')) übergeben werden. und die Python REPL ist hier ein bisschen dumm, denke, dass es nur eine Aussage war, wenn es tatsächlich while gefolgt von einem print ist.

Enter drücken, so dass die Eingabeaufforderung wieder >>> vor print wird das Problem in der interaktiven Interpreter beheben:

Python 3.6.0 (default, Jan 13 2017, 00:00:00) 
[GCC 4.8.4] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> n = 5 
>>> while n > 0: 
... print (n) 
... n = n - 1 
... 
5 
4 
3 
2 
1 
>>> print ('Blastoff!') 
Blastoff! 
>>> 

aber feststellen, dass die while Schleife jetzt läuft, sobald die Verbindung Anweisung beendet wird, dh vor dem >>> Prompt wird erneut angezeigt.

Neben dem Standard Python REPL gibt es noch weitere Shells. Eine beliebte, ipython, hat eine Konsolen-Shell, die kopier klebte Inhalt erkennen und diese ein ordnungsgemäß ausgeführt werden:

% ipython 
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
Type 'copyright', 'credits' or 'license' for more information 
IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help. 

In [1]: n = 5 
    ...: while n > 0: 
    ...: print (n) 
    ...: n = n - 1 
    ...: print ('Blastoff!') 
    ...: 
5 
4 
3 
2 
1 
Blastoff! 

In [2]: 
0

Beide PythonAnywhere und die Schale wird alles innerhalb der ... als Teil der ersten Anweisung behandeln, was bedeutet, dass alles nach einer if oder with oder while oder for, die mit 3 Punkten beginnt, soll ausgeführt werden, wenn die erste Anweisung ausgewertet wird.

Wenn Sie eine if-Anweisung hatten, wird jeder eingegebene Code, während die ... dort ist, ausgeführt, wenn die if-Anweisung ausgewertet wird.

Verwandte Themen