2012-09-18 47 views
2

使用Python 2.7返回None,我有以下代碼:解壓一個元組與單一元件,或者如果元組是無

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

return None 

result變量從一個sqlite3的查詢僅返回一個返回值。如果查詢返回結果,我想解包並返回數據,否則我想返回None。上面的代碼看起來過於冗長,完全沒有pythonic。有沒有更好的辦法?

+3

你可以擺脫這些沒有pythonic的無用的';':-) – Emmanuel

+0

「unpythonic-ness」的一部分是在行末尾的分號... – mgilson

+0

我是一個芭比女孩生活在C/C#世界中。去除分號,哈哈。 – Chris

回答

7

你可以使用一個ifelse條件:

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

或簡化這歸因於:

return result[0] if result else None 

,如果你不關心result可能是一些其他的false-y value如一個空的元組等等。還有一個更緊湊的方式

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

+2

我只是寫'result [0] if result else None',應該在上下文中工作。 –

+1

我會使用這個(+1),但是值得注意的是,如果元組有*多於1個元素,那麼OP的代碼將會失敗,而這會很高興地通過。 – mgilson

+0

呵呵,我不知道你可以通過索引來引用元組值。猜猜這是我的蟒蛇noobness顯示。謝謝! – Chris

4

假設你只會得到任何非空元組或無,最簡單的方法:

return result and result[0] 
+3

我認爲你的意思是*最短*的方式 - 不一定最簡單。 – mgilson

2

的一種方式可能是這樣做:

return (result or [None])[0] 

但第一個更清楚。

避免在最後使用分號(不是C代碼),並閱讀python文檔可以幫助你。這是一個很花時間。

2

我想沒有答案是不完整的try/except

try: 
    return result[0] 
except TypeError,IndexError: 
    return None 
0

除此之外,你離開了;result != Noneresult is not None被替換的事實,我有你的代碼沒有問題。

這很簡單,很容易理解,如果你的請求返回2個或更多元素,它們不會默默地失敗:它會引發異常而不是默默地返回第一個元素,就像迄今爲止所有的解決方案一樣。

相關問題