【发布时间】:2014-06-22 23:47:31
【问题描述】:
假设我有以下脚本,test.py:
import my_library
bar = 12
def foo():
nested_bar = 21
my_library.do_things()
def nested_foo():
nested_bar += 11
not_a_variable += 1
{$ invalid_syntax
bar = 13
foo()
bar = 14
我很好奇当我运行python test.py 时到底发生了什么。显然 Python 不只是逐行读取程序 - 否则它不会在实际执行程序之前捕获语法错误。但这使得解释器的工作显得有些模糊。我想知道是否有人会帮助我解决问题。我特别想知道:
Python 什么时候意识到第 13 行有语法错误?
Python 在什么时候读取嵌套函数并将它们添加到
foo的范围内?同理,Python 遇到函数
foo时如何将其添加到其命名空间,而不执行它?假设
my_library是无效导入。 Python 是否必须在执行任何其他命令之前引发ImportError?假设
my_library是一个有效的模块,但它没有函数do_things。在foo()执行期间或之前,Python 会在什么时候意识到这一点?
如果有人能指出有关 Python 如何解析和执行脚本的文档,我将不胜感激。
【问题讨论】:
-
1.从来没有,因为第 5 行有语法错误 :)
-
哈哈,这就是我没有仔细阅读我的程序而得到的。固定
-
我认为这个问题一点也不宽泛——Eevee 的回答完全涵盖了它。我只是想知道解释器在解析/执行过程中采取的步骤。
标签: python python-2.7 ipython