Jam*_*mes 11 python exception-handling exception
如果我尝试以下代码(在Python 3.2.2中),
def f():
raise Exception
x = f()
Run Code Online (Sandbox Code Playgroud)
然后它似乎没有x被触及 - 它要么保持未定义,要么保留它以前的任何值.只要赋值的右侧抛出异常,这种行为是否得到保证?我意识到这是一个非常基本的问题,但我找不到有关分配工作原理的详细信息.更一般地说,在与任务相关的任何事情发生之前,是否总是评估整个右侧?在使用setattr,分配列表元素或使用元组解包(即类似的东西x, y = y, f())时,这是否正确?
Gle*_*ard 13
Python语言参考指定了这个:
http://docs.python.org/reference/expressions.html#evaluation-order
Python从左到右评估表达式.请注意,在评估分配时,右侧在左侧之前进行评估.
评估右侧,然后是左侧,然后分配本身就会发生.从而,
def x():
print "x"
fail()
def y():
print "y"
fail()
x().a = y()
Run Code Online (Sandbox Code Playgroud)
保证打印"y"并使用NameError失败; 它永远不会提出"x",或尝试任何转让.
| 归档时间: |
|
| 查看次数: |
913 次 |
| 最近记录: |