Python 在获取字典中不存在的 key 时,会返回 KeyError 异常。.get() 方式是一种容错方法,但不是最优解。
Collections 模块提供了一种处理字典更好的方法。与标准字典不同,defaultdict 获取不存在的 key ,则会抛出一个指定的默认值,
from collections import defaultdict
capitals = defaultdict(lambda: "The key doesn't exist")
capitals['Madrid'] = 'Spain'
capitals['Lisboa'] = 'Portugal'
print(capitals['Madrid'])
print(capitals['Lisboa'])
print(capitals['Ankara'])
Spain
Portugal
The key doesn't exist
出现这种错误,首先要看一下你是否使用了字典,错误提示的意思是找不到对应的键值。
例如,给定如下字典:
book_dict = {"price": 500, "bookName": "Python设计", "weight": "250g"}
若是查找字典中存在的key,则正常输出:
print(book_dict["price"])
运行结果如下:
若是查找字典中不存在的key,则报错:
print(book_dict["sdfs"])
如上所示,报错提示就是KeyError:。对于这种问题,可以使
第一种解决方法,首先测试key是否存在,然后才进行下一步操作,如:
第二种解决方法,修改要输出的值为a或b或c
转载自:Python 常见报错类型整理(一) - 小码果 - 博客园
### Python3 中 KeyError 的原因及解决方案
在 Python3 开发过程中,`KeyError` 是一种常见的异常情况。该错误通常发生于尝试访问字典中不存在的键时[^1]。以下是针对这一问题的原因分析及其对应的解决方案。
#### 1. 错误产生的根本原因
当程序试图通过键名获取字典中的值,而所给定的键并未存在于字典结构之中时,便会触发 `KeyError` 异常。例如,在以下代码片段中,由于 `'username'` 并未被定义为字典的一部分,因此会引发错误:
```python
data = {'name': 'Alice'}
print(data['username']) # 这将抛出 KeyError: 'username'
#### 2. 使用 `.get()` 方法规避 KeyError
为了防止直接访问可能缺失的键而导致程序崩溃,可以采用字典对象自带的 `.get()` 方法代替传统的方括号索引方式。`.get()` 方法会在找不到指定键的情况下返回一个默认值(可选),从而避免抛出异常。
```python
value = data.get('username', 'default_value')
if value != 'default_value':
print(value)
else:
print("Key not found.")
在此处,默认值设为字符串 `"default_value"`,可以根据需求替换为自己期望的内容[^2]。
#### 3. 利用条件判断预先检查键的存在性
另一种有效手段是在实际取值之前先利用成员运算符 (`in`) 对目标键是否存在进行检测。只有确认无误后再进一步操作数据项本身即可减少不必要的风险。
```python
if 'username' in data:
username = data['username']
else:
username = None
#### 4. 结合 try-except 块捕获并处理异常
对于那些确实需要动态读写大量不确定字段的应用场合来说,适当运用异常机制不失为明智之举。即把可能发生问题的部分包裹在一个更大的保护层里面,即使真的出现了状况也能从容应对而不是让整个应用瞬间终止运行。
```python
username = data['username']
except KeyError:
username = None
finally:
以上四种方法各有优劣之处,具体选择哪一种应视具体情况而定。无论采取何种途径都务必牢记一点:良好的编程习惯始终是预防各种潜在隐患的最佳武器之一[^3]。