我有一个方法,如果查找失败,将返回一个对象或None
。以下哪种风格更好?
def get_foo(needle):
haystack = object_dict()
if needle not in haystack: return None
return haystack[needle]
,或者
def get_foo(needle):
haystack = object_dict()
try:
return haystack[needle]
except KeyError:
# Needle not found
return None
我尚未决定哪个更适合自己。另一个选择是return haystack[needle] if needle in haystack else None
,但我不确定那更好。
答案 0 :(得分:10)
对于此特定示例,dict
方法get
看起来最简洁:
def get_foo(needle):
haystack = object_dict()
return haystack.get(needle)
一般来说,在Python中,人们倾向于先尝试/除了先检查一些内容 - 请参阅EAFP中的glossary条目。请注意,许多“成员资格测试”功能在幕后使用例外。
我不会就多重回报或替代方案的相对优点展开激烈的争论:)
答案 1 :(得分:2)
如果两者完全相同,选择你最喜欢的那个并且更具可读性 - 我喜欢第二个,但两者都很好。
(如果这比另一个更快,也许一个 - 所以如果表现真的重要,那么测试它并选择更快的那个)
答案 2 :(得分:-2)
我使用的每种语言都是第一个版本。例外情况基本上是伪装成许多相同的问题,所以如果我能避免它,我就不会使用它们。
还有可能的性能成本。我不了解Python,但是在许多其他语言中,创建异常的成本很高,你将在下一行中丢弃。