gpt4 book ai didi

python isinstance vs hasattr vs try/except : What is better?

转载 作者:太空狗 更新时间:2023-10-29 17:43:20 25 4
gpt4 key购买 nike

我试图找出确定对象 obj 是否可以执行操作 do_stuff() 的不同方法之间的权衡。据我了解,可以通过三种方式确定这是否可行:

# Way 1
if isinstance(obj, Foo):
obj.do_stuff()

# Way 2
if hasattr(obj, 'do_stuff'):
obj.do_stuff()

# Way 3
try:
obj.do_stuff()
except:
print 'Do something else'

哪个是首选方法(为什么)?

最佳答案

我相信最后一种方法通常是 Python 编码人员的首选,因为 motto在 Python 社区中教授:“请求宽恕比获得许可更容易”(EAFP)。

简而言之,座右铭的意思是避免在做某事之前检查你是否可以做某事。相反,只需运行该操作。如果失败,请妥善处理。

此外,第三种方法还有一个额外的好处,即可以清楚地表明该操作应该有效。


话虽如此,您真的应该避免像那样使用裸except。这样做将捕获任何/所有异常,甚至是不相关的异常。相反,最好专门捕获异常。

在这里,您需要捕获 AttributeError。 :

try:
obj.do_stuff() # Try to invoke do_stuff
except AttributeError:
print 'Do something else' # If unsuccessful, do something else

关于python isinstance vs hasattr vs try/except : What is better?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21024913/

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