我正在Github上创建一个开源项目,我想确保尽我所能使它变得强大,稳定并且它的Pythonic。为此,我有一个问题,当我希望密钥存在于字典中并且不包括在内时,我应该使用什么样的异常。
也就是说,调用函数类似于:
def calling_func():
my_dict = {
'value_1': 1,
'value_2': None,
'value_3': '3',
}
foo(my_dict)
我的函数foo
希望字典包含key
(以及相应的value
),value_4
。在下列情况下提出KeyError
是否合适?
def foo(my_dict):
expected_keys = ['value_1', 'value_2', 'value_3', 'value_4']
for key in expected_keys:
if key not in my_dict:
raise KeyError
似乎KeyError
的传统用法与此用法相反。
我应该为此创建自己的异常类型吗?
class MissingKeyError(Exception):
pass
还是有什么效果?
答案 0 :(得分:2)
KeyError
是适当的例外。
如果可能,请使用Python异常,尤其是适用于第三方的API。这节省了导入和学习曲线。
您可以简化代码:
if not my_dict.viewkeys() >= set(expected_keys):
raise KeyError
或只是访问所有密钥:
for key in expected_keys:
my_dict[key] # test for presence early
或只是不测试并让使用该密钥的代码引发异常。