Поведение переводчика в Python
Я знаю, что интерпретатор Python выполняет командную строку за строкой без компиляции всей программы при запуске. Но, однако, я не понимаю, почему он перехватывает синтаксические ошибки в следующих последующих строках без выполнения начальных строк.
Например, в скрипте, если я напишу следующие утверждения:
print("I am first")
print("Second")
print(third") # Syntax error. Missed one "
Это дает ниже вывод:
File "script2.py", line 3
print(third")
^
SyntaxError: EOL while scanning string literal
Я ожидал выхода, как показано ниже:
I am first
Second
File "script2.py", line 3
print(third")
^
SyntaxError: EOL while scanning string literal
Мне интересно узнать, почему интерпретатор Python демонстрирует такое поведение.
2 ответа
Это зависит от того, как вы запускаете интерпретатор Python. Если вы дадите ему полный исходный файл, он сначала проанализирует весь файл и преобразует его в байт-код перед выполнением любой инструкции. Но если вы передадите его построчно, он будет анализировать и выполнять код блок за блоком
так что переходите на одну линию за раз
Python не интерпретирует код напрямую, так как он неэффективен. Во-первых, он преобразует код Python в .pyc
файл, который скомпилирован байт-кодом и после этого он будет интерпретировать скомпилированный байт-код (.pyc
).
Если при преобразовании кода Python в '.pyc' произошла ошибка, то он будет вызван во время компиляции; вот почему вы получаете ошибку во время компиляции