Python 检查特定参数值是否作为kwargs传递的正确方法
假设我有一个接受可选关键字参数(**kwargs)的函数。我想做三件不同的事情,这取决于:(I)这个参数是随特定值一起传递的,(ii)它是在没有特定值的情况下传递的,(iii)它不是传递的 到目前为止我所拥有的。例如:Python 检查特定参数值是否作为kwargs传递的正确方法,python,Python,假设我有一个接受可选关键字参数(**kwargs)的函数。我想做三件不同的事情,这取决于:(I)这个参数是随特定值一起传递的,(ii)它是在没有特定值的情况下传递的,(iii)它不是传递的 到目前为止我所拥有的。例如: def myfunc(**kwargs): ... do stuff myfunc(print_job=True) # output: # Incoming print job. myfunc was called. myfunc(print_job=Fal
def myfunc(**kwargs):
... do stuff
myfunc(print_job=True)
# output:
# Incoming print job. myfunc was called.
myfunc(print_job=False)
# output:
# No incoming print jobs. myfunc was called.
myfunc()
# output:
# myfunc was called.
在这种情况下,处理kwargs的正确方法是什么?它是字面意义上的,使用两个if语句检查特定值,如:
def myfunc(**kwargs):
if 'print_job' in kwargs:
if kwargs['print_job'] is True:
#... do stuff
else:
# ... do stuff
else:
# ... do stuff
或者还有其他更类似python的方法吗?一种方法是在逻辑中使用keyrerror
def myfunc( **kwargs ):
try:
# if 'print_job' isn't a key in kwargs this throws an exception.
if kwargs['print_job'] is True:
print( "'print_job' is True" )
else:
print("'print_job' is not True but is:", kwargs['print_job'])
except KeyError: # KeyError exception caught here
print( "'print_job' not in kwargs.") # The no 'print_job' code
这就是“请求原谅而不是许可”的原则。捕获KeyError成为代码逻辑的一部分。我更喜欢使用“get()”完成这类操作。 它比嵌套的if-else更简单。
或者您可以编写一个helper函数,它将从kwargs返回特定参数的值。 如果您有更多的参数需要查询,这将非常有帮助。然后
def helper(key_list, kwargs):
# do your stuff
# or call other functions for execution
# return something
def myfunc(**kwargs):
helper(['printjob', 'arg2', 'arg3'], kwargs)
为了安全起见,我会使用dict的
.get()
函数。因为如果打印作业键不存在,它将抛出一个键错误
。这将使用if
语句保存。秋千和回旋处。当一起避免错误是如此简单时,为什么要用错误捕捉来请求原谅呢?对于更难/意外的错误,公平竞争。但肯定不是这样。@S3DEV我发布了我处理类似案件的方法。我喜欢现代语言能够轻松捕捉异常的方式。所以try:假设存在密钥(key);除了:没有代码>符合我的思维方式。在过去,我发现如果它是OK():do_simple();else:handle_exception()
将异常作为逻辑的一个重要部分,特别是在异常的_OK
非常复杂的情况下。在这种情况下,许多不同的if-else
逻辑将起作用,并且易于遵循。我的方法将异常视为逻辑的预期部分,而不是错误。
def helper(key_list, kwargs):
# do your stuff
# or call other functions for execution
# return something
def myfunc(**kwargs):
helper(['printjob', 'arg2', 'arg3'], kwargs)