📅  最后修改于: 2023-12-03 15:10:16.624000             🧑  作者: Mango
问题67 的原文:某人正在编写一个 Python 代码段。在运行时,该程序由于“KeyError”而失败了。以下是出错的代码行:
d = {"john":40, "peter":45}
print(d["peter"])
print(d["george"])
请选出正确的选项,以使程序可以顺利运行。
A. d["george"] = None
B. d.setdefault("george", None)
C. d.get("george", -1)
D. d.update({"george":None})
返回markdown格式的答案如下:
## KeyError
KeyError是一个Python默认的异常类型,当尝试使用字典中不存在的键时,将会引发此异常类型。
在这个解决方案中,我们已经确定代码中“KeyError”的原因是字典中没有“george”的键。此时,可以采用以下四种方法中的一种来解决问题。
### 选项A
```python
d["george"] = None
选项A会将字典d中第一个'name'为'george'的值设为None。试图访问不存在的键仍会引发KeyError。
d.setdefault("george", None)
选项B将在字典d中添加一项新的{'george': None}。因为使用了setdefault
方法,当字典中不存在指定的键时,该方法会将指定的值None添加到字典中,并返回该值。所以,在这个解决方案中,'d.setdefault(“george”, None)'将添加一个新键值,其值为None。
d.get("george", -1)
选项C使用了字典对象的.get
方法,用于访问字典d中的键'george'。此方法返回键对应的值,如果字典中不存在'george'键,则返回指定的默认值。在这个解决方案中,'d.get(“george”, -1)'返回None。
d.update({"george":None})
选项D使用了字典对象的update
方法,用来更新字典中内容,传参为一个字典。此方法将在字典d中添加一个新项{'george': None}。
如果我们稍微修改原始代码,使其输出选项B,就可以避免KeyError异常:
d = {"john":40, "peter":45}
print(d["peter"])
d.setdefault("george", None)
print(d["george"])