3

使用 python 2.7,我有以下代码:

if result != None:
    (data,) = result
    return data

return None

result变量是从只返回一个值的 sqlite3 查询返回的。如果查询返回结果,我想解包并返回数据,否则我想返回None。上面的代码似乎过于冗长,而且根本不是 Pythonic。有没有更好的办法?

4

5 回答 5

10

你可以使用一个if else条件:

return result[0] if result is not None else None

或将其简化为:

return result[0] if result else None

如果您不关心result可能是其他一些false-y 值,例如空元组等。

于 2012-09-18T15:18:34.537 回答
4

Assuming that you'll only get either non-empty tuple or None, the simplest way:

return result and result[0]
于 2012-09-18T15:22:22.423 回答
2

一种方法可能是:

if result is not None:
    return result[0]
return None

还有一种更紧凑的方法可以做到这一点:

return (result or [None])[0]

但第一个更清楚。

避免在末尾使用分号(不是 C 代码),阅读 python 文档会对您有所帮助。这是一段美好的时光。

于 2012-09-18T15:24:56.030 回答
1

I suppose no answer is complete without try/except:

try:
   return result[0]
except TypeError,IndexError:
   return None
于 2012-09-18T15:27:16.410 回答
0

除了你留下的和应该被替换;的事实之外,我对你的代码没有任何问题。result != Noneresult is not None

这很简单,很容易理解,如果您的请求返回 2 个或更多元素,它不会默默地让您失败:它会引发异常,而不是像迄今为止的所有解决方案一样默默地返回第一个元素。

于 2012-09-18T15:41:22.233 回答