python:验证函数参数

时间:2011-02-02 03:34:33

标签: python coding-style python-3.x

我需要确保将所有命名参数传递给方法(我不想要任何默认值)。以下是强制执行它的最佳方法吗?

class X:
  def func(self, **kwargs):
    if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'):
      raise ArgException(kwargs)

3 个答案:

答案 0 :(得分:5)

对于Python 2.x,Hugh的答案(即只使用命名的位置参数)是你最好的选择。

对于Python 3.x,您还可以选择要求使用关键字参数(而不仅仅是允许它),如下所示:

class X(object):
    def func(self, *, arg1, arg2, arg3):
        pass

答案 1 :(得分:3)

class X(object):
    def func(self, **kwargs):
        required = set(['arg1','arg2','arg3'])
        if not set(kwargs.keys()).issuperset(required):
            raise ArgException(kwargs)

虽然你可以让翻译处理它:

class X(object):
    def func(self, arg1, arg2, arg3):
        pass

答案 2 :(得分:0)

你想允许其他参数吗?如果不是:

class X(object):
    def func(self, arg1, arg2, arg3):
        pass

如果是:

class X(object):
    def func(self, arg1, arg2, arg3, **kwargs):
        pass

适用于所有版本的Python。