我编写了如下函数,可选参数'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
时引发错误,说“类型为'非类型'的对象没有长度”
任何想法如何解决这个问题?
答案 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')