我是Python的新手,试图了解PythonWay®
我理解了EAFP原理,但在本示例中将如何应用它?
编辑:我只关心没有子属性的项目,而不关心dosomethingwith()内部发生的事情。
就我对EAFP的理解而言,我应该像往常一样使用可能错误的语句,并捕获异常,但是由于该语句位于for中,因此我被迫尝试整个for块。
try:
for child in item.children:
dosomethingwith( child )
except AttributeError:
""" did the exception come from item.children or from dosomethingwith()? """
但是,这样做看起来很像LBYL:
try:
item.children
except AttributeError:
""" catch it """
for child in item.children: ...
最佳答案
实际上,当您要访问可能不可用的资源时,可以使用EAFP。 IMO,AttributeError
是一个不好的例子……
无论如何,您可以在缺少的children
属性和从AttributeError
函数引发的do_something_with()
之间进行区别。您需要具有两个异常处理程序:
try:
children = item.children
except AttributeError:
print("Missing 'children' attribute")
raise # re-raise
else:
for child in children:
try:
do_something_with(child)
except AttributeError:
print("raised from do_something_with()")
raise # re-raise
EAFP的经典示例是
make_dir_if_not_exist()
函数:# LBYL
if not os.path.exists("folder"):
os.mkdir("folder")
# EAFP
try:
os.mkdir("folder")
except FileExistsError:
pass
关于python - 当不知道异常的来源时,EAFP的方式是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54507074/