Поведение переводчика в 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' произошла ошибка, то он будет вызван во время компиляции; вот почему вы получаете ошибку во время компиляции

Лучшее объяснение можно найти по вопросу Stackru

Другие вопросы по тегам