在后续调用该方法的过程中,仅针对缺失方法捕获AttributeError
的最“pythonic”方法是什么,而不是AttributeError
?我有这个代码,它试图调用一个方法,并在缺少方法或一些预期的异常时提供一些操作:
def foo(unknown_object):
try:
unknown_object.do_something()
except SomeSpecificError:
# the method existed, but failed in some expected way
except AttributeError:
# do something else ...
这也有问题AttributeError
正在运行do_something()
,例如编程错误(拼写错误的某些属性)。这对于调试来说显然不是很好,捕获太多可能本身就是一个bug。我可以把它改写成:
def foo(unknown_object):
try:
method=unknown_object.do_something
except AttributeError:
# do something else ...
else:
try:
method()
except SomeSpecificError:
# the method existed, but failed in some expected way
但是这个嵌套解决方案是避免捕获太多AttributeError
的最pythonic方法吗?
注意:该方法缺失或可调用(或者是编程错误,应该引发未捕获的异常),因此我不需要检查调用能力。
答案 0 :(得分:0)
如果你真的想检查特定的东西,那么你可以使用hasattr和callable方法
if hasattr(unknown_object, "do_something") and callable(unknown_object.do_something):
unknown_object.do_something()