2012-05-12 102 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')