Python KeyError2025年3月17日 | 阅读11分钟 映射是 Python 中的一种数据结构,它将一组值映射到另一组值。Python 字典是映射中使用最广泛的。每个值都分配一个键,可以使用该键来查看值。当用于查找值的键在映射中不存在时,就会发生 KeyError。 除了其基本用途之外,Python 映射还有其他一些优点。映射可以代替列表使用。尽管列表是 Python 中常用的数据结构,但它们有时可能不是最佳选择。当需要使用特定键快速访问数据时,可以使用映射,因为在列表中查找特定值可能需要更长时间。 此外,Python 提供了一种通过字典推导式构建字典或映射的实用方法。开发人员可以使用此功能从任何可迭代对象(例如列表、元组或集合)快速轻松地生成字典。 Python 映射还有其他一些优点。映射可以代替列表使用。尽管列表是 Python 中常用的数据结构,但它们有时可能不是最佳选择。当需要使用特定键快速访问数据时,可以使用映射,因为在列表中查找特定值可能需要更长时间。 此外,Python 提供了一种通过字典推导式构建字典或映射的实用方法。开发人员可以使用此功能从任何可迭代对象(例如列表、元组或集合)快速轻松地生成字典。当需要快速有效地创建映射时,这可能会有所帮助。 本文将讨论 Python KeyError 以及带示例的 KeyError 处理。但在讨论 Python KeyError 之前,我们将了解 Python 中的字典。 Python 中的字典Python 中的字典 (dict) 是一个离散的值集合,其中包含与映射等效的存储数据值。它与其他数据类型不同,因为它只有一个元素:一个单独的值。它包含键值对。由于键值的存在,它效率更高。冒号表示键值对的分隔,逗号表示每个键的分隔。这个 Python 字典的工作方式与普通字典相同。键必须是唯一的,并且由不可变数据类型组成,包括字符串、整数和元组。 在 Python 中使用字典的主要好处之一是能够快速检索数据。当处理大量数据时,根据其键识别特定值非常快,因为字典使用哈希表来存储键值对。因此,对于需要定期搜索数据的应用程序,字典是最佳选择。Python 字典可以修改是另一个关键方面。这意味着在字典创建后,您可以添加、更改或删除键值对。当保存的数据是动态的并且会随时间频繁更改时,这尤其有用。 除了这些优点之外,在 Python 中处理字典还可以使用各种复杂的技术和最佳实践。例如,将可迭代对象转换为字典的字典推导式是一种创建复杂数据结构的非常有效的方法。此外,使用 get() 和 setdefault() 等内置方法可以简化对缺失或默认数据的处理。 开发人员可以通过强调这些特性和推荐实践来更好地掌握如何在他们的 Python 应用程序中使用字典。了解如何在 Python 中使用字典可能对您的成功至关重要,无论是创建简单的脚本还是复杂的应用程序。 例如 让我们举一个例子来理解如何在 Python 中使用字典 (dict)。 输出 Empty dictionary: {} Dictionary with string keys: {'apple': 2, 'orange': 3, 'banana': 5} Dictionary with tuple keys: {('John', 'Math'): 85, ('Jane', 'Science'): 92, ('Bob', 'English'): 78} Dictionary with the use of dict(): {'name': 'John', 'age': 20, 'major': 'Computer Science'} Dictionary with nested dictionaries: {'CS101': {'title': 'Introduction to Computer Science', 'credits': 4}, 'ENG201': {'title': 'Advanced English', 'credits': 3}, 'HIS101': {'title': 'World History', 'credits': 3}} Dictionary with a list as its value: {'apple': 2, 'orange': 3, 'banana': 5} Python 中的 KeyError当我们尝试从不存在的字典中访问键时,Python 会引发 KeyError。这是一个内置的异常类,由与字典或包含键值对的对象交互的多个模块引发。现在,我们知道 Python 字典是什么以及它是如何工作的。让我们看看 KeyError 的定义。每当我们想要访问 Python 字典中不存在的键时,Python 都会引发 KeyError。 映射逻辑是一种数据结构,它将一块数据连接到其他重要数据。因此,当访问映射但找不到时,会引发错误。它类似于查找错误,语义错误是我们正在寻找的键不在其内存中。在下面的示例中更好地表示。 KeyError 异常也可以在访问除字典之外的其他映射类型(例如 defaultdict 或 OrderedDict)中的键时抛出。虽然这些映射对象与字典相似,但它们也包含在某些情况下可能很有用的不同属性。例如,defaultdict 为空键提供默认值,而不是像 OrderedDict 那样跟踪项目添加到映射中的顺序。因此,在使用这些 Python 对象时,务必注意这一点。 在访问键之前检查字典中是否存在键是防止 KeyError 错误的好习惯。我们可以使用“in”关键字来确定字典中是否存在键。如果键不存在于字典中,可以使用“get”方法作为抛出 KeyError 异常的替代方法。在这种情况下,此方法返回 None。 最后,当访问的键不存在于字典或其他映射对象中时,Python 中经常会抛出 KeyError 异常。如果我们了解此异常并知道如何管理它,我们就可以构建更可靠、无错误的 Python 代码。 例如 让我们举一个例子来理解我们如何在 Python 中看到 KeyError。我们使用键 A、B、C 和 D,其中 D 在 Python 字典中不存在。尽管如此,字典中存在的其余键都正确显示输出,而 D 则显示 KeyError。 输出 执行上述代码后,我们将得到如下所示的输出 45 51 67 Traceback (most recent call last): File "", line 6, in KeyError: 'D' Python 中 KeyError 的处理机制任何遇到 KeyError 的人都可以负责任地处理它。它可以检查特定程序的所有可能输入并正确管理任何有风险的条目。当我们收到 KeyError 时,有一些常规方法可以处理它。此外,还可以使用一些方法来处理 KeyError 的机制。 常用的 .get() 函数Python 中的 KeyError 错误通常使用 .get() 函数处理。它使我们能够像使用方括号从字典中获取值一样访问值,通过检索给定键的值。但是,如果请求的键在字典中不存在,.get() 将提供我们可以指定的默认值,而不是触发 KeyError。当我们需要更优雅地处理缺失键并防止代码崩溃时,这很有帮助。 在字典对象上调用 .get() 的语法很简单:我们将要返回值的键作为第一个参数传入。第二个选项可以是默认值,如果字典不包含该键,则将使用该默认值。例如,我们可以使用 my_dict.要获取字典 my_dict 中键 my_key 的值,请使用函数 get("my_key")。如果字典包含 my_key,它将返回匹配的值。如果不是,.get() 的默认返回值为 None。我们可以通过添加一个不同的默认值作为第二个选项并将其指定为 my_dict.'default_value' 和 'my_key' in get 来选择不同的默认值。 例如 输出 Get price for: Apple Apple is 50 rupees. Get price for: Mango Mango's cost is unknown. KeyError 的通用解决方案:try-except 方法try-except 块是处理 KeyError 的另一种常见 Python 技术。可能导致 KeyError 的代码位于 try 块中,问题在 except 块中处理。 输出 Get price for: Apple Apple is 50 rupees. Get price for: Litchi Litchi 's cost is unknown. 在上面的示例中,代码尝试使用索引技术获取产品字典中输入产品键的值。如果键存在于字典中,则 print 语句打印相关值;否则,抛出 KeyError,并运行 except 块来处理问题。 Try-except 对于管理否则会导致程序崩溃或意外行为的异常很有用。此外,它允许更宽容的错误处理,并可以为用户提供更有见地的错误消息。 使用 "in" 运算符Python 中的 KeyError 异常也可以通过使用 in 运算符来处理。在尝试访问键之前,可以使用 in 运算符来判断它是否存在于字典中。 首先定义要使用的字典。 应用 in 运算符: in 运算符可以判断键是否存在于字典中以处理 KeyError。在字典中,语法是 "key" in dictionary。 示例 输出 Value to the Key is: 1 示例 2 输出 Key not found 上面的代码使用 if "a" in my_dict: 来判断键 "a" 是否存在于 my_dict 中。如果键存在,我们使用 my_dict["a"] 来获取其值并执行所需的操作。如果键不存在,我们运行 else 部分中的函数。通过在使用 in 运算符尝试访问其值之前明确检查键是否存在,我们可以防止 KeyError。 处理找不到键的情况:您可以在 else 部分插入代码来处理这种情况。这可能包括错误消息、备用操作过程或最适合您需求的任何其他逻辑。 通过主动使用 in 运算符检查键是否在字典中,您可以防止程序崩溃。这样,您可以优雅地处理 KeyError 异常。 处理 KeyError 的新方法:使用 DefaultDictPython 的内置 dict 类是 defaultdict 的子类,它是 collections 模块中的一个类。它旨在为字典中不存在的键提供默认值,这有助于解决 KeyError 错误。 您必须从 collections 模块导入 defaultdict 并使用默认值类型对其进行初始化才能使用它。当尝试访问无效键时,defaultdict 将返回键类型的默认值,而不是抛出 KeyError。 以下是如何使用 defaultdict 处理 KeyError 的示例 输出 defaultdict(<class 'int'>, {'a': 2, 'b': 5, 'c': 6}) 0 2 5 说明
为字典中不存在的键提供默认值演示了 defaultdict 如何用于处理 KeyError 错误。它简化了代码,并消除了对明确 KeyError 测试的需要。 结论现在,我们了解了一些常见场景,其中 Python 的 KeyError 异常可能被抛出,以及几种防止它们终止我们程序的优秀策略。下次我们遇到 KeyError 时,我们会知道它很可能是由于错误的字典键查找造成的。通过查看回溯的最后几行,我们可以获得确定问题来源所需的所有信息。 如果问题是代码中的字典键查找,我们可以使用更安全的 .get() 函数和默认返回值,而不是直接在字典上查询键。如果我们的代码没有引起问题,那么 try-except 块是我们控制代码流的最佳选择。 异常不必令人恐惧。如果我们理解回溯中呈现的信息和错误的根本原因,我们可以利用这些方法使我们的程序流程更具可预测性。 下一个主题Python super() 函数 |
我们请求您订阅我们的新闻通讯以获取最新更新。