我对 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
这几乎就像 python 没有看到 try: 语句。任何帮助表示赞赏。
原文由 garen 发布,翻译遵循 CC BY-SA 4.0 许可协议
tryAppend(foo, var1)
按以下顺序(大致)评估:tryAppend
引用foo
引用var1
引用tryAppend
执行的任何操作,不包括 try-except)错误发生在 #2,在输入函数和 try 块之前很久。事实上,try 块 不能 抛出 NameError,因为唯一使用的名称是
parent
和child
,两者都是参数,因此始终可用(如果.append
不存在,那是一个AttributeError
)。同样,下面的代码不会打印“捕获到它”,因为在执行 try 块之前引发了异常: