Python没有被解释,而是显示编译的行为

2022-05-21 06:55:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我了解到python是一种脚本语言,它的执行引擎由一个解释器组成,解释器逐行执行每一行代码。
我有一个简单的python代码-

print("1")
print("2")
print("3")
print("4)

这里第4行print(“4”)包含一个错误(缺少结束引号)。当我运行这个程序,然后简单地得到一个错误,告诉我一个语法错误在第4行。

我的问题是,既然python是解释的而不是编译的,那么输出就不应该是

1
2
3
Syntax error in line 4
<>但是它直接给我一条错误信息,对于第1, 2行和第3行没有任何输出,就像任何其他编译语言一样,如java、C++和c++b/>我是Python的新手,请解释。你知道吗


Tags: 代码in引擎程序错误lineerrorjava脚本语言解释器引号printsyntax语法错误编译语言
1条回答
网友
1楼 ·

重要的是要意识到Python代码首先被编译成一种称为字节码的中间形式。然后由Python解释器执行该字节码。如果您熟悉的话,它类似于Java的编译/执行周期,尽管Python可以立即执行编译后的代码。字节码与可由硬件直接执行的机器码不同,它是更高级的。你知道吗

在Python中,编译单元是模块,它通常对应于整个文件,而不是单个语句。你知道吗

因此,示例中的第4行将与前面的几行一起编译,第4行中的语法错误会阻止执行的开始。你知道吗

通过反汇编函数,您可以了解字节码是什么样的:

import dis

def f():
    print("1")
    print("2")
    print("3")

dis.dis(f)

输出

  2           0 LOAD_CONST               1 ('1')
              3 PRINT_ITEM          
              4 PRINT_NEWLINE       

  3           5 LOAD_CONST               2 ('2')
              8 PRINT_ITEM          
              9 PRINT_NEWLINE       

  4          10 LOAD_CONST               3 ('3')
             13 PRINT_ITEM          
             14 PRINT_NEWLINE       
             15 LOAD_CONST               0 (None)
             18 RETURN_VALUE