函数内部的 Python Try-Except

新手上路,请多包涵

我对 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 许可协议

阅读 358
1 个回答

tryAppend(foo, var1) 按以下顺序(大致)评估:

  1. 获取对象 tryAppend 引用
  2. 获取对象 foo 引用
  3. 获取对象 var1 引用
  4. 以第二个和第三个作为参数调用第一个(=执行函数 tryAppend 执行的任何操作,不包括 try-except)

错误发生在 #2,在输入函数和 try 块之前很久。事实上,try 块 不能 抛出 NameError,因为唯一使用的名称是 parentchild ,两者都是参数,因此始终可用(如果 .append 不存在,那是一个 AttributeError )。

同样,下面的代码不会打印“捕获到它”,因为在执行 try 块之前引发了异常:

 raise Exception("Catch me if you can")
try:
    pass # do nothing
except:
    print "caught it"

原文由 user395760 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题