使用python 2.7,我有以下代码:
if result != None:
(data,) = result
return data
return None
从仅返回一个值的sqlite3查询返回result
变量。如果查询返回结果,我想解压缩并返回数据,否则我想返回None。上面的代码似乎过于冗长而且根本不是pythonic。还有更好的方法吗?
答案 0 :(得分:9)
您可以使用if
else
条件:
return result[0] if result is not None else None
或将其简化为:
return result[0] if result else None
如果您不关心result
可能是其他false-y value,例如空元组等。
答案 1 :(得分:4)
假设您只获得非空元组或无,最简单的方法:
return result and result[0]
答案 2 :(得分:2)
一种方式可能是:
if result is not None:
return result[0]
return None
还有一种更紧凑的方法:
return (result or [None])[0]
但第一个更清楚。
请避免在结尾使用分号(不是C代码),阅读python文档可以帮助您。这是一个很好的时间。
答案 3 :(得分:1)
我认为没有try/except
没有答案是完整的:
try:
return result[0]
except TypeError,IndexError:
return None
答案 4 :(得分:0)
除了您离开的;
以及result != None
应由result is not None
替换之外,我的代码没有任何问题。
这很简单,非常容易理解,如果有一天你的请求返回2个或更多元素,它就不会默默地失败你:它会引发一个异常而不是静默地返回第一个元素,就像目前为止的所有解决方案一样。 / p>