gar*_*ren 3 python exception-handling exception try-catch
我对python的try-except子句有了很好的理解,但是当我试图把它放在一个函数中时遇到了问题.
>>> def tryAppend(child, parent):
... try:
... parent.append(child)
... except NameError:
... print "WRONG NAME"
>>> var1 = []
>>> var2 = 'test2'
>>> tryAppend(var2, var1) #works, no error
>>> tryAppend(foo, var1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
Run Code Online (Sandbox Code Playgroud)
它几乎就像python没有看到try:语句.任何帮助表示赞赏.
小智 10
我对python的try-except子句有了很好的理解
不,嗯,也许你有,但那时你严重缺乏其他更重要的领域.要么你期望尝试(双关语不是)的范围神奇地扩展,要么你不明白代码被评估的顺序...我将假设后者.tryAppend(foo, var1)按此顺序评估(大致):
tryAppend引用foo引用var1引用tryAppend操作,不包括try-except)错误发生在#2,早在函数和try块输入之前.实际上,try块不能抛出NameError,因为使用的唯一名称是,parent并且child都是参数,因此始终可用(如果.append不存在,则为a AttributeError).
你问为什么
raise Exception("Catch me if you can")
try:
pass # do nothing
except:
print "caught it"
Run Code Online (Sandbox Code Playgroud)
不打印"抓住它".
名称错误发生在进入 tryAppend 之前。当尝试将 foo 传递给函数时,它会评估 foo 的值。这有效:
def tryAppend(child, parent):
parent.append(child)
var1 = []
try:
tryAppend(foo, var1)
except NameError:
print 'WRONG NAME'
Run Code Online (Sandbox Code Playgroud)