2016-09-04 4 views
6

Ich habe gelesen, dass der Interpreter den Code zeilenweise ausführt und den Fehler, falls vorhanden, gleichzeitig meldet und die weitere Ausführung stoppt. So in Python, sollten Sie die Datei ex1.py,Wie führt der Python-Interpreter den Code Zeile für Zeile im folgenden Code aus?

print "Hello world" 
12variable = 'bye' 
print 12variable 

nun nach der Wirkung des Dolmetschers, liefe der Dolmetscher die erste Zeile dh er druckt Hallo Welt zuerst und dann in der nächsten Zeile (Zeile die Syntaxfehler anzeigen -durch-Linie-Arbeit). Daraus ergibt sich die erwartete Ausgabe ist:

Hello world 
12variable = 'bye' 
     ^
SyntaxError: invalid syntax 

Aber die tatsächliche Leistung ist -

12variable = 'bye' 
     ^
SyntaxError: invalid syntax 

Warum ist es nicht gedruckt Hello World am ersten?

+0

Wo hast du das gelesen? –

+0

Ich habe darüber zunächst in meinem Computer Grundlagenbuch gelesen. – dlp96

Antwort

5

Es hängt davon ab, wie Sie den Python Interpréter ausführen. Wenn Sie ihm eine vollständige Quelldatei geben, analysiert er zuerst die gesamte Datei und konvertiert sie vor der Ausführung einer Anweisung in Bytecode. Aber wenn Sie es Zeile für Zeile füttern, wird es analysieren und führen Sie den Code bloc bloc:

  • python script.py: parsen vollständige Datei
  • python < script.py: parsen und ausführen von Block

Die Letzteres ist in der Regel die Art, wie Sie es interaktiv oder über eine GUI-Shell wie idle verwenden.

2

Weil Ihr Verständnis des Interpreters fehlerhaft ist. Es ist zwar möglich, dass das beschriebene Verhalten für eine Teilmenge von Fehlern auftritt, aber nicht für viele (die meisten?) Fehler.

Wenn der Interpreter ein gültiges Programm erstellen kann, aber zur Laufzeit einen Fehler hat, dann passiert das, was Sie beschreiben.

Da der Fall, auf den Sie zeigen, ein Syntaxfehler ist, der verhindert, dass ein gültiges Programm erstellt wird, ist das Verhalten so, wie Sie es sehen.

+0

Was bedeutet es, dass der Interpreter den Code zeilenweise ausführt? Bedeutet es, dass es eine Zeile nach der anderen analysiert und die Zeile ausführt, oder es analysiert nur eine Zeile nach der anderen. Wenn kein Syntaxfehler vorliegt, wird die nächste Zeile analysiert und nach der Analyse der gesamten Datei ausgeführt der Bytecode vorausgesetzt, dass in keiner Zeile ein Fehler aufgetreten ist? – dlp96

+1

Es analysiert das gesamte Programm. Wenn ein Fehler auftritt, der verhindert, dass ein gültiger Bytecode erstellt wird, wird zu diesem Zeitpunkt ein Fehler ausgegeben, und es werden niemals Zeilen des Programms ausgeführt. Wenn es gelingt, eine gültige Bytecode-Version des Programms zu erstellen, führt es das Programm aus. Wenn ein Laufzeitfehler auftritt, löst er einen Fehler aus und beendet die Ausführung des Programms in der Zeile, in der der Fehler aufgetreten ist. – jwpfox

5

Es ist ein Mythos, dass Python eine vollständig interpretierte Sprache ist. Wenn CPython ein Skript ausführt, wird der Quellcode analysiert (hier werden Syntaxfehler abgefangen) und in Bytecode kompiliert (manchmal werden diese in Ihrem Verzeichnis als .pyc Dateien zwischengespeichert), bevor etwas ausgeführt wird. In dieser Hinsicht ist Python nicht grundlegend anders als Java oder C#, abgesehen davon, dass es nicht viel Zeit für Optimierungen benötigt, und ich glaube, dass der Bytecode nur für eine Anweisung interpretiert wird, anstatt JITed für Maschinencode zu sein (außer Du benutzt etwas wie PyPy).

0

Ich verstehe es so:

Python führt den Code Zeile für Zeile nach es ist im Zustand Byte-Code.

Der Unterschied zwischen dieser Sache und Kompilierung (in anderen Sprachen wie C++) ist, dass Sie diesen Prozess der Interpretation jedes Mal, wenn Sie das Skript ausführen müssen.

Der Python-Interpreter interpretiert den Code jedes Mal, wenn Sie das Skript ausführen.

In C++ kompilieren Sie das Programm und Sie können es ausführen, ohne es erneut zu kompilieren, es sei denn, Sie möchten das System ändern.

Verwandte Themen