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

sna*_*ies 8 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)
Run Code Online (Sandbox Code Playgroud)

这会引起错误b=None,说"类型为'无类型'的对象没有长度"

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

Thi*_*ter 31

你可以简单地使用if b:- 这将要求值既不是None,也不是空字符串/列表/等等.


the*_*est 8

你可以简单地改变 -

def something(a, b=None)
Run Code Online (Sandbox Code Playgroud)

至 -

def something(a, b="")
Run Code Online (Sandbox Code Playgroud)


Tim*_*ker 5

除非你真的需要检查的长度b,为什么不简单地做

if b is not None:
    ...
Run Code Online (Sandbox Code Playgroud)

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

if b is not None and len(b) >= 1:
    ...
Run Code Online (Sandbox Code Playgroud)

and操作者的短路,这意味着如果b is None,表达式的第二部分甚至没有评价,所以没有将引发异常。