seo 标题:注意,python 的错误捕捉会覆盖同名的变量,导致 UnboundLocalError: local variable 'error' referenced before assignment
发现一个问题,如果我在一个函数里面,想把是什么错误也给返回的话,也会遇到 UnboundLocalError: local variable 'error' referenced before assignment 报错
def parse():
assert False
def main():
error = None
try:
parse()
except Exception as error:
pass
return error
if __name__ == "__main__":
main()
运行报错
Traceback (most recent call last):
File "/home/pon/code/me/ideaboom/dddd/1.py", line 16, in <module>
main()
File "/home/pon/code/me/ideaboom/dddd/1.py", line 12, in main
return error
UnboundLocalError: local variable 'error' referenced before assignment
因为 except Exception as error 中的 error 会覆盖一开始的 error = None,但是 except Exception as error 中的 error 的作用域只有在 try except 中,导致 try except 执行完毕之后,error 就被释放不可访问到了,从而导致 return error 的时候,报错 UnboundLocalError 了
非常的无语,感觉是 cpython 的逻辑漏洞
测试了 cpython3.8-cpython3.13 都存在这个问题,看来只能接受避免了,就当做 cpython 的特性算了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。