如何在 Python 中修复 KeyError - 如何在 Python 中修复字典错误

2024 年 8 月 29 日 | 5 分钟阅读

Python 是一种流行的语言,提供了多种库和函数,使代码更有效、更易于编写。像任何其他编程语言一样,Python 也有一组错误和异常,包括 ImportError、CompileError、KeyError 等。

Python 中的 KeyError 是什么?

KeyError 是任何 Python 程序员都会遇到的最常见错误。KeyError 是在程序尝试访问字典中不存在的键时抛出的错误。字典是 Python 中的一种数据结构,它以标签存储数据,或者我们可以说它存储键值对。每个键都是唯一的,并与其关联的值。

让我们看一个会引发 KeyError 的简单示例

输出

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[4], line 2
      1 keys = {"cat" : 1, "dog" : 2, "monkey" : 3}
----> 2 print(keys["cow"])

KeyError: 'cow'

说明

我们在其中创建了一个名为 **keys 的字典**,其中包含不同的键值对。然后,我们打印了与键 'cow' 关联的值。这个键在字典中不存在。默认情况下,**编译器在字典中找不到键 'cow' 会感到困惑,因此会抛出 KeyError**。

如何修复此错误?

KeyError 可以通过多种方式修复。

  • 最好的方法是检查键是否存在于字典中。使用条件语句,我们可以使用 'in' 运算符检查键。

输出

Key not found

说明

我们使用 if 语句的 'in' 运算符检查了键 "cow"。它会检查键是否存在于字典中。如果不存在,它将打印语句 "Key not found"。

  • 我们还可以使用get() 方法来检查键是否存在于字典中。首先,它会检查键是否存在于字典中,如果存在,则会打印键的值。否则,它将返回。

输出

Key not found

说明

使用 get() 函数,我们检查了字典中的键 "cow"。它将检查键是否存在。如果不存在,它将打印语句 "Key not found"。

  • 我们可以使用defaultdict 类来修复 KeyError。此类是 collections 模块下的子模块。如果在标准字典中调用不存在的键,将引发键错误。

输出

0
0
0
cat 1
cow 0
dog 2
monkey 3

说明

我们首先从 collection 模块导入了 **defaultdict 库**。然后,我们创建了一个包含不同键值的字典,并将这些值添加到默认字典中。然后,我们尝试使用 defaultdict 访问一个不存在于字典中的键 "cow"。它将默认给出值 0。然后,我们使用循环语句访问字典中的所有键值。它将给出键 "cow" 及其值 0,以及字典中存在的其他键值。

JSON 数据中的 KeyError

Python 程序在处理包含嵌套字典的 JSON 数据时,也可能遇到 KeyError。JSON(JavaScript Object Notation)是一种存储和修改结构化数据的格式。JSON 数据表示为嵌套字典。

让我们看几个 JSON 数据中键错误的例子。

示例:包含不同员工信息的 JSON 数据。

输出

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[8], line 15
      1 emp_data = {
      2     "employee": [
      3         {
   (...)
     13     ]
     14 }
---> 15 desp = emp_data["employee"][0]["department"]

KeyError: 'description'

说明

我们创建了包含不同员工不同详细信息的 JSON 数据。然后,我们尝试访问一个不存在于数据中的键 "department"。由于我们尝试访问一个不存在的键,它将抛出键错误。

对于大型复杂 JSON 数据,KeyError 有时可能难以解决,因为很难在大量数据中找到丢失的键。

解决 JSON 数据中的 KeyError

JSON 数据中键错误的基本且最简单的解决方案是在访问嵌套字典中的键之前进行检查。这就是我们解决 JSON 数据中键错误的方法。

代码

输出

No Department found in the Data

说明

它将检查数据中嵌套字典内的键。它将使用 if 条件检查数据中所有元素的非空列表。它将检查 **emp 中的键 "description"**。由于没有键 "department",它将打印消息 **"No department found in the Data"**。

如何忽略 KeyError?

可以使用try 和 except 块来处理 KeyError。try-except 块用于处理程序中的故障或异常。

让我们通过几个例子来了解如何使用 try 和 except 块处理键错误。

示例:处理字典中的键错误

代码

输出

No key found

说明

我们尝试访问一个不存在于字典中的键 "cow"。为了处理此错误,我们使用try-except 块。如果键存在,它将打印值。否则,它将进入 except 块,打印"No key found"

示例:处理 JSON 数据中的键错误

代码

输出

No Department found in the Data

说明

在这里,我们创建了包含员工详细信息的 JSON 数据。然后,我们尝试使用 try-except 块访问一个不存在的键。如果出现任何KeyError,它将抛出"No Department found in the data" 的异常。如果出现任何索引错误或类型错误,它将抛出异常并打印"No department found"