python解释器如何在以下代码中逐行运行代码?

dlp*_*p96 9 python interpreter syntax-error

我已经读过解释器逐行运行代码并同时报告错误并停止进一步执行.所以在python中,考虑文件ex1.py,

print "Hello world"
12variable = 'bye'
print 12variable
Run Code Online (Sandbox Code Playgroud)

现在根据解释器的工作,解释器将运行第一行,即它首先打印hello world,然后在下一行显示语法错误(逐行工作).因此预期的产出是:

Hello world
12variable = 'bye'
         ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

但实际产量是 -

12variable = 'bye'
         ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

为什么不在Hello World第一次打印?

Ser*_*sta 8

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

  • python script.py :解析完整文件
  • python < script.py :由bloc解析并执行

后者通常是您以交互方式或通过GUI shell使用它的方式idle.


Tre*_*eld 5

Python是一种完全解释的语言,这是一个神话.当CPython运行脚本时,解析源代码(这是它将捕获语法错误的地方),并在.pyc执行任何操作之前编译成字节码(有时这些字节码在文件目录中缓存).在这方面,Python并不是完全不同于Java或C#,除了它不花费太多时间进行任何优化,我相信字节码一次解释一条指令,而不是JITed到机器代码(除非你正在使用像PyPy这样的东西.