对于可能返回None的方法,哪种返回方式"更好"?

Dae*_*yth 1 python coding-style

我有一个方法,它将返回一个对象或None查找失败.以下哪种风格更好?

def get_foo(needle):
    haystack = object_dict()
    if needle not in haystack: return None
    return haystack[needle]
Run Code Online (Sandbox Code Playgroud)

要么,

def get_foo(needle):
    haystack = object_dict()
    try:
        return haystack[needle]
    except KeyError:
        # Needle not found
        return None
Run Code Online (Sandbox Code Playgroud)

我还没有决定哪个更适合自己.另一个选择是return haystack[needle] if needle in haystack else None,但我不确定那更好.

det*_*tly 10

对于这个特定的例子,看起来这个dict方法get最简洁:

def get_foo(needle):
    haystack = object_dict()
    return haystack.get(needle)
Run Code Online (Sandbox Code Playgroud)

一般来说,在Python中,人们更倾向于尝试/除了先检查一些东西 - 请参阅词汇表中EAFP条目.请注意,许多"成员资格测试"功能在幕后使用例外.

我不会对多次退货或替代品的相对优点开始一场火焰战争:)