Why doesn't Python spot errors before execution?
假设我在Python中有以下代码:
1 2 3 4 | a ="WelcomeToTheMachine" if a =="DarkSideOfTheMoon": awersdfvsdvdcvd print"done!" |
为什么不出错? 它甚至如何编译? 在Java或C#中,这将在编译期间被发现。
Python不是一种编译语言,这就是为什么你的代码不会抛出编译错误的原因。
Python是一种字节码解释语言。从技术上讲,源代码被"编译"为字节代码,但是如果使用PyPy或Pyston,字节代码就是及时编译(JIT),否则它是逐行解释的。
工作流程如下:
您的Python代码 - >编译器 - > .pyc文件 - >解释器 - >您的输出
使用标准的python运行时这是什么意思?基本上所有繁重的工作都在运行时发生,与C或C ++不同,其中完整的源代码在编译时被分析并转换为二进制。
因为Python是一种解释语言。这意味着如果Python的解释器没有到达该行,它将不会产生任何错误。
在"编译"期间,python几乎只检查你的语法。由于
1 | globals()['awersdfvsdvdcvd'] = 1 |
文件中较早的内容足以抑制执行带有拼写错误名称的行时出现的
好吧,所以python不能只查找全局语句吗?答案就是"不" - 从模块"foo",我可以用类似的方式添加模块"bar"的全局变量。并且python无法知道在它实际运行之前导入或将导入哪些模块(我也可以在运行时动态导入模块)。
请注意,我提到的为什么Python作为一种语言为什么不能给你一个关于这些事情的警告的大多数原因涉及人们做疯狂搞砸事情。有很多工具可以警告你这些事情(假设你不会做那种愚蠢的事情)。我最喜欢的是