2012-05-12 64 views
4

的存在,我寫了一個函數,如下所示,帶有可選參數'b'。如果else基於python函數的可選參數

url依賴於b的存在。

def something(a, b=None) 
    if len(b) >= 1: 
     url = 'http://www.xyz.com/%sand%s' % (a, b) 
    else: 
     url = 'http://www.xyz.com/%s' (a) 

這就提出了一個錯誤時b=None,說「類型的對象‘無型’有沒有length」

任何想法如何解決這個問題?

+0

添加無檢查? –

+2

如果'''''''''會發生什麼? –

回答

20

您可以簡單地使用if b: - 這將需要價值既不能None,而不是一個空字符串/列表/什麼。

+0

謝謝!這工作很好。 – snakesNbronies

3

評價的b長度時,它不是None,該if聲明更改爲:

if b is not None and len(b) >= 1: 
    ... 

因爲and運營商,len(b)不會,如果第一次測試(b is not None)失敗評估。即表達評估是短路的。

3

,除非你真的需要檢查的b長度,何不乾脆做

if b is not None: 
    ... 

如果你還需要檢查的長度(因此也執行else的一部分,如果b == ""),使用

if b is not None and len(b) >= 1: 
    ... 

and操作者短路,這意味着如果​​,表達式的第二部分甚至沒有評價,所以沒有將引發異常。

6

您可以簡單地改變 -

def something(a, b=None) 

到 -

def something(a, b="") 
0

你可以試試這個代碼:

def something(a, *b): 
    if len(b) == 0: 
     print('Equivalent to calling: something(a)') 
    else: 
     print('Both a and b variables are present')