gpt4 book ai didi

python - 仅在特定属性上捕获 AttributeError

转载 作者:行者123 更新时间:2023-12-04 10:36:49 24 4
gpt4 key购买 nike

有没有办法 catch AttributeError仅在特定属性上?

例如如果 foo,我希望此代码通过没有 bar属性但是 AttributeError如果没有 baz 则抛出异常一个属性。

try:
a = foo.bar + foo.baz
except AttributeError:
pass

我可以写
if hasattr(foo, 'bar'):
a = foo.bar + foo.baz

但我会 rather ask forgiveness than permission ...

最佳答案

首先,与所有编码 zen 语句一样,宽恕与许可原则不是绝对的。特别是在这种情况下,您肯定知道第一个将发生在 try/except 中。块是AttributeError的加注,但您可能会发现自己处于以下情况:AttributeError在额外的昂贵或有副作用的操作之后引发。

def some_function(foo):
costly_operation()
insert_something_to_a_database(foo)
return foo.bar + foo.baz

try:
some_function(foo)
except AttributeError:
# All the work done was not needed and it may even have
# left traces (like the db insert) that now need to be undone.

在这些情况下,在执行任何操作之前检查权限更简单、更安全、更易读、更有效,而不是执行不需要的操作,甚至在之后尝试修复困惑。

无论如何,如果你真的需要请求原谅而不是许可,你可以在事后简单地检查许可:你继续假设一切都是正确的,如果有错误,你会弄清楚它是否是你想要的提高与否。
try:
some_function(foo)
except AttributeError:
if not hasattr(foo, 'bar'):
raise

关于python - 仅在特定属性上捕获 AttributeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60137911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com