Guten Abend vielen Dank dass ihr euch Zeit nimmt meine Frage zu beantworten.
Nach langer Recherche verstehe ich den Prozess der Kompilierung so:
(1.Schritt)Beim kompilieren wird der Quellcode zuerst in Bytecode umgewandelt. (2.Schritt)Dieser Bytecode wird dann zeilenweise in der Python virtuelle Maschine ausgeführt.
Jetzt frage ich mich wie sowas passieren kann:
print('Text vor dem Fehler wird normal ausgegeben')
A = 12k 34 (Absichtlicher syntax error)
Ausgabe:
Text vor dem Fehler wird normal ausgegeben
Error...(Fehlermeldung)
Meine Frage ist es nun wieso konnte der erste Schritt ausgeführt werden?
Wird der Quellcode etwa trotz Syntax Fehler kompiliert und erst beim schrittweisen kompilieren in der pvm entdeckt?
Ich kann es mir nicht vorstellen dass wirklich erfolgreich ein Bytecode kompiliert wird trotz so einem Fehler...
Verständnisfrage zur allgemeinen Kompilierung
- __blackjack__
- User
- Beiträge: 14053
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Anfaenger99: Das was Du da beschreibst kann nicht passieren. Du bekommst beim Versuch das auszuführen einen `SyntaxError` und keine Ausgabe von dem `print()`:
Der Bytecode wird auch nicht ”zeilenweise” ausgeführt, denn Zeilen gibt es auf der Ebene nicht mehr. Es sind noch Informationen enthalten die die Zeilennummern enthalten, damit Fehlermeldungen aussagekräftiger sind.
Code: Alles auswählen
$ python3 ./forum22.py
File "./forum22.py", line 2
A = 12k 34
^
SyntaxError: invalid syntax
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
-
- User
- Beiträge: 4
- Registriert: Sonntag 3. Januar 2021, 22:52
Hey vielen Dank für die schnelle Antwort.
Ich habe es jetzt nochmal selbst getestet und Sie haben Recht.
Aber ich wollte darauf hinaus manchmal ist es möglich dass der Code bis zum Fehler ausgeführt wird, wie hier z.b.
print('Text vor dem Fehler wird normal ausgegeben')
ABCDEFG (Absichtlicher syntax error)
Da frag ich mich wie das funktioniert?
Ich habe es jetzt nochmal selbst getestet und Sie haben Recht.
Aber ich wollte darauf hinaus manchmal ist es möglich dass der Code bis zum Fehler ausgeführt wird, wie hier z.b.
print('Text vor dem Fehler wird normal ausgegeben')
ABCDEFG (Absichtlicher syntax error)
Da frag ich mich wie das funktioniert?
-
- User
- Beiträge: 4
- Registriert: Sonntag 3. Januar 2021, 22:52
Text vor dem Fehler wird normal ausgegeben
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
start(fakepyfile,mainpyfile)
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec(open(mainpyfile).read(), __main__.__dict__)
File "<string>", line 2, in <module>
NameError: name 'ABCDEFG' is not defined
[Program finished]
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
start(fakepyfile,mainpyfile)
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec(open(mainpyfile).read(), __main__.__dict__)
File "<string>", line 2, in <module>
NameError: name 'ABCDEFG' is not defined
[Program finished]
- __blackjack__
- User
- Beiträge: 14053
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Anfaenger99: Das ist ja kein Syntaxfehler sondern ein Laufzeitfehler. Der Bytecode dafür kann problemlos erstellt werden. Namen werden erst zur Laufzeit aufgelöst, und dann müssen sie halt existieren, oder es gibt diese Ausnahme.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
-
- User
- Beiträge: 4
- Registriert: Sonntag 3. Januar 2021, 22:52
Ok jetzt hat es Klick gemacht mir war als nicht klar ob der Bytecode mit dieser Art von Fehlern erzeugt werden kann.
Vielen vielen Dank.
Vielen vielen Dank.