Python中的解释器行为

时间:2017-07-28 05:02:29

标签: python python-3.x interpreter

我知道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 个答案:

答案 0 :(得分:0)

Python不直接解释代码,因为它效率不高。 首先,它将python代码转换为编译字节码的.pyc文件,之后,它将解释编译后的字节码(.pyc)。

如果将python代码转换为' .pyc'那么它将在编译时提出;这就是你在编译时遇到错误的原因

Best explanation can be found on the StackOverflow question

答案 1 :(得分:0)

这取决于你如何运行Python解释器。如果你给它一个完整的源文件,它将首先解析整个文件并在执行任何指令之前将其转换为字节码。但是如果你逐行提供它,它将解析并逐块执行代码

所以一次一行