如果否则基于python函数可选参数的存在

时间:2012-05-12 21:48:19

标签: python arguments

我编写了如下函数,可选参数'b'。

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时引发错误,说“类型为'非类型'的对象没有长度”

任何想法如何解决这个问题?

5 个答案:

答案 0 :(得分:30)

您可以简单地使用if b: - 这将要求值不是None而不是空字符串/列表/其他。

答案 1 :(得分:7)

你可以简单地改变 -

def something(a, b=None)

到 -

def something(a, b="")

答案 2 :(得分:4)

要评估b不是None时的长度,请将if语句更改为:

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

由于and运算符,如果第一个测试(len(b))失败,则不会评估b is not None。即表达式评估被短路。

答案 3 :(得分:4)

除非你真的需要检查b的长度,否则为什么不做呢

if b is not None:
    ...

如果您还需要检查长度(如果else也执行了b == ""部分),请使用

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

and运算符短路,意味着如果b is None,表达式的第二部分甚至不被评估,那么不会引发异常。

答案 4 :(得分:0)

您可以尝试以下代码:

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