我应该返回 None 还是 (None, None)?

59 投票
9 回答
8307 浏览
提问于 2025-04-16 23:43

我们有一个对象的方法,它会返回一个城市和州的组合,比如 ('Boston', 'MA')。在某些情况下,可能没有有效的城市和州可以返回。那么在这种情况下,返回 None 更合适,还是返回一个包含 (None, None) 的两个元素的组合更好呢?

9 个回答

12

(None, None) 在Python中并不等于 False。而且,创建一个元组比不创建元组要麻烦一些。所以我更倾向于使用 None

47

如果你在特殊情况下只返回一个值,就可能会导致元组解包的用法出问题。这样的话,你的一些调用者可能会写出:

city, state = getCityStateTuple("something")

在这种情况下,返回 None 会让 调用者 出现错误:

TypeError: 'NoneType' object is not iterable

所以,我个人建议在你的情况下返回 (None, None)。不过,具体情况还得看你的调用者是怎么用的。

58

我会返回 None。如果没有结果,那为什么还要返回一些看起来像结果的东西呢?

这样也更容易测试:

result = getCity()
if result:
   # do something

只有在可能出现两个值中只有一个是 None 的情况下,我才会返回 (None, None)(比如 ('Boston', None))。在这种情况下,这样做会更一致。

撰写回答