有没有比以下示例更好的方法来检测是否提供了可选参数?即使提供了None
,我们也希望返回它而不是引发异常。
预期结果:
>>> get_value('key-exists-not') # default not provided
KeyError
>>> get_value('key-exists-not', None) # should support arg
None
>>> get_value('key-exists-not', default=None) # as well as kwarg
None
>>> get_value('key-exists-not', default='')
''
这是最佳/推荐的方式吗?
def get_value(key, default='somerubbishthatwillneverbeused'):
try:
return _data[key]
except KeyError:
if default != 'somerubbishthatwillneverbeused':
return default
raise
答案 0 :(得分:6)
使用哨兵值;它是您使用is
进行测试的私人单身人士:
_sentinel = object()
def get_value(key, default=_sentinel):
if default is _sentinel:
# no other value provided
答案 1 :(得分:4)
两个选项
def foobar (**kwargs):
if 'some_key' in kwargs:
# it was provided
另一个
default = object()
def foobar (some_key=default):
if some_key is default:
# some_key not specified