代码:
def somef(*iterable_objs, positions):
try:
# some statement
except TypeError:
print('Argument \'positions\' is missing')
return False
>>>somef([1,2,3], 'abc', (4,5,6))
引发{p> TypeError
因为缺少参数positions
我想知道是否有一种方法如何处理这个异常
答案 0 :(得分:6)
您不能将*args
与其他位置参数一起使用; positions
被视为仅关键字参数。因为它没有默认值,所以仍然需要它。
为positions
提供一个默认值,以删除在调用时始终指定它的要求:
def somef(*iterable_objs, positions=None):
if positions is None:
# calculate a default instead
positions = range(len(iterable_objs))
或明确传入positions
关键字参数:
somef([1,2,3], 'abc', positions=(4,5,6))
旁注:永远不要使用print()
来表示错误情况。最终用户不想知道程序员犯了错误,程序需要听到错误。请改用raise SomeException()
。
答案 1 :(得分:1)
正如大家已经提到的,如果你在positions
之后使用*iterable_objs
参数,它会被视为仅限关键字的参数,但是如果你改变参数的顺序,一切都会正常工作。
def somef(positions, *iterable_objs):
答案 2 :(得分:0)
如果您不想总是要求为其传递值,请提供默认值:
def somef(*iterable_objs, positions=None):