假设我有以下功能:
def myFun(a=None, b=None):
print a, b
现在我调用函数:
myFun("hi") # Case 1
>>>hi None
myFun(b="hi") # Case 2
>>>None hi
myFun(a="hi") # Case 3
>>>hi None
如果函数调用者没有决定将值“hi”分配给哪个变量,是否有办法抛出异常?这意味着我希望在第一种情况下有例外,但在第二种情况和第三种情况下没有例外。我使用python 2.7。
答案 0 :(得分:5)
在Python3中,您可以指定keyword-only arguments:
def myFun(*, a=None, b=None):
print(a, b)
myFun('hi')
加注
TypeError: myFun() takes 0 positional arguments but 1 was given
在Python2中,作为Ricardo Silveira points out,您可以使用**kwargs
强制所有参数都是关键字参数。
def myFun(**kwargs):
a, b = kwargs.get('a'), kwargs.get('b')
print(a, b)
myFun('hi')
# TypeError: myFun() takes exactly 0 arguments (1 given)
答案 1 :(得分:2)
def my_fun(**kwargs):
a = kwargs.get("a", None)
b = kwargs.get("b", None)
# have your code here...
然后:my_fun("hi")
不应该工作......
答案 2 :(得分:1)
您实际上可以允许用户使用** kwargs提供他们想要的任何参数。
def myFun(**kwargs):
print kwargs[a]
print kwargs[b]
如果未定义a或b,这将导致错误,但它们不是很有帮助。
您可以通过检查值是否存在来制作自己的错误。例如:
def myFun(**kwargs):
if not kwargs.get(a):
raise Exception('a is not here!')
if not kwargs.get(b):
raise Exception ('b is not here!')
print kwargs[a], kwargs[b]