我想得到您的意见,哪两个片段是更多的pythonic方式来处理查找。Python:抛出异常或返回无?
我正在开发一个XML文件的包装。我正在加载XML文件,解析它,将内容存储在字典中,然后通过类方法进行访问。
特别是 - 如果一个给定的返回没有结果,我应该返回None还是引发(Key)错误?
我有点困惑,因为有人建议我抛出一个错误而不是返回一个空值。他们说,处理错误没有更高层次会更容易和更清楚。
这是代码的简化版本:
class NoResult(KeyError):
pass
class Wrapper(object):
....
self.my_dict = {}
....
get_Entity(self, id):
if id in self.my_dict:
value = self.my_dict[id]
return value
else:
return None
class Wrapper(object):
....
self.my_dict = {}
....
get_Entity(self, id):
if id in self.my_dict:
value = self.my_dict[id]
return value
else:
throw NoResult
我真的很感激您的想法!
两种方式都是Pythonic。如果某些现有条目有可能是“无”,则返回“无”将不明确。实际上,你可能只是实现了两者,就像已经为'dict'完成的那样:'d [key]'引发一个异常,'d.get(key)'返回'None'(或者其他默认值:'d .get(key,default)')。 –
虽然这里有一个意见元素,我不认为这是“主要基于意见”,事实上python文档特别推荐EAFP代码相对于LBYL代码。这至少应该为回答这个问题提供客观的基础。 – Vality