缺少Python中的关键字参数

时间:2017-04-18 19:45:39

标签: python python-3.x keyword-argument

代码:

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 我想知道是否有一种方法如何处理这个异常

3 个答案:

答案 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):