我是Python的新手和背后的概念。
前几天我跟着EAFP而没有听说过:
try:
self._parent.OptionalFunction(arg1, arg2, arg3)
except AttributeError:
# self._parent does not have OptionalFunction, no problem
pass
发生了什么事情,在重构时,我将OptionalFunction
从将3个单独的对象更改为对象列表和其他内容。我忘了更改上面一个调用OptionalFunction
的块,所以我传递了三个参数,我OptionalFunction
中的代码试图计算它们并失败,引发并归因于错误。
由于上面的代码块,错误从未出现过错误,我搜索的方式很长。
所以我将所有代码更改为代码块,如:
if hasattr(self._parent, "OptionalFunction"):
self._parent.OptionalFunction(listOfArgs, otherArgs)
今天我了解了EAFP和LBYL,所以我想知道在使用EAFP方面如何防止我的问题“pythonic”?
我想到的一个解决方案是捕获OptionalFunction
内的AttributeErrors并引发自定义错误,但这会炸毁我的函数,我将不得不在我写的每个函数中考虑这个案例:“我会不会将来与EAFP一起使用?“
那么有一种巧妙的方法可以解决这个问题吗?