为什么dict.popitem()引发KeyError而不返回None?

时间:2019-07-18 17:32:48

标签: python python-3.x dictionary

在字典为空时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的?

1 个答案:

答案 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