使用 python 2.7,我有以下代码:
if result != None:
(data,) = result
return data
return None
该result
变量是从只返回一个值的 sqlite3 查询返回的。如果查询返回结果,我想解包并返回数据,否则我想返回None。上面的代码似乎过于冗长,而且根本不是 Pythonic。有没有更好的办法?
使用 python 2.7,我有以下代码:
if result != None:
(data,) = result
return data
return None
该result
变量是从只返回一个值的 sqlite3 查询返回的。如果查询返回结果,我想解包并返回数据,否则我想返回None。上面的代码似乎过于冗长,而且根本不是 Pythonic。有没有更好的办法?
你可以使用一个if
else
条件:
return result[0] if result is not None else None
或将其简化为:
return result[0] if result else None
如果您不关心result
可能是其他一些false-y 值,例如空元组等。
Assuming that you'll only get either non-empty tuple or None, the simplest way:
return result and result[0]
一种方法可能是:
if result is not None:
return result[0]
return None
还有一种更紧凑的方法可以做到这一点:
return (result or [None])[0]
但第一个更清楚。
请避免在末尾使用分号(不是 C 代码),阅读 python 文档会对您有所帮助。这是一段美好的时光。
I suppose no answer is complete without try/except
:
try:
return result[0]
except TypeError,IndexError:
return None
除了你留下的和应该被替换;
的事实之外,我对你的代码没有任何问题。result != None
result is not None
这很简单,很容易理解,如果您的请求返回 2 个或更多元素,它不会默默地让您失败:它会引发异常,而不是像迄今为止的所有解决方案一样默默地返回第一个元素。