在字典为空时dict.popitem()
引发KeyError
异常而不是返回None
(等于Null)是否有任何好处?
my_dict = {'color': 'blue', 'fruit': 'apple', 'pet': 'dog'}
while True:
try:
item = my_dict.popitem()
print(f'{item} removed')
# process the item here...
except KeyError:
print('The dictionary is empty !')
break
还是引发异常而不是返回None
被认为是更pythonic的?
答案 0 :(得分:2)
对于这种特定方法,通常按以下方式使用:
k, v = my_dict.popitem()
当dict为空时,哪个当前会引发KeyError
,如果它返回了TypeError
,则将是None
。
提高KeyError
意味着编写此代码:
try:
k, v = my_dict.popitem()
except KeyError:
# Dictionary is empty
else:
# Process k, v
# Or
if my_dict:
k, v = my_dict.popitem()
# Process k, v
else:
# Dictionary is empty
并返回None
:
item = my_dict.popitem()
if item is not None:
k, v = item
# Process k, v
else:
# Dictionary is empty
如果该方法返回了None
,则您必须承认以下事实:字典可能为空,或者得到的含义模糊的TypeError
少了,而KeyError
更清楚了。
引发错误也可以表明通常不会发生这种情况。如果您改写这样的内容:
def do_stuff(my_dict):
"""Process an item from a dictionary (It must not be empty)"""
k, v = my_dict.popitem()
# do stuff
会引发适当的错误。
它可以像这样轻松实现:
item = my_dict.popitem() if my_dict else None