【发布时间】:2017-04-11 03:07:17
【问题描述】:
我得到了 python 执行的意外行为。
if True:
print("Hello")
else:
I am an error. what can you do about it?
现在,此代码不会引发 SyntaxError,因为控件永远不会进入 else 语句。在像 C++ 这样的编译语言中,它会出错。即使在 Java 中,未使用的代码也是一个错误。但不是在 Python 中。
现在在这种情况下:
x = 10
def foo():
print(x)
x += 1
打印语句引发了一个 UnboundLocalError 指定 here。 按照前面的逻辑,这个错误应该直到控件遇到x+=1才出现。但它确实如此,就像在任何其他编译语言中一样。
那么如何确定代码何时以编译或解释的方式运行?
编辑: 如果它被编译成字节码 .pyc 文件然后被解释。那为什么没有检测到第一个例子的else语句呢?
【问题讨论】:
-
第一个例子中的else是语法错误。如果你把它放在一个 .py 文件中并尝试执行它,你会看到。
-
我认为这与您的问题有关,您*在解释器外壳中运行代码,即 REPL。
-
如果我们把它们都放在交互式shell中..会出现差异..你知道为什么吗?
标签: python python-3.x exception interpreted-language compiled-language