Python KeyError
在Python中,映射是一种将一个集合映射到另一个值集合的数据结构。Python字典是最常用的映射方法。对每个值分配一个键,可以用来查看该值。当键不存在于用于查找值的映射中时,就会发生KeyError。
在本文中,我们将讨论Python的KeyError以及其示例中的错误处理。但在讨论Python KeyError之前,我们将了解有关Python中的字典。
Python中的字典
Python中的字典 (dict) 是一个离散的值集合,其中包含等价于映射的存储数据值。它与其他数据类型不同之处在于它只有一个元素,即单个值。它包含键和值对。由于键值的存在,它更加高效。冒号表示键和值对的分隔,逗号表示每个键的分隔。这个Python字典的工作方式和普通字典一样。键必须是唯一的,由不可更改的数据类型组成,包括 字符串、整数 和 元组。
例如:
让我们通过一个示例来了解如何在Python中使用字典(dict)。
# A null Dictionary
Dict = {}
print("Null dict: ")
print(Dict)
# A Dictionary using Integers
Dict = {1: 'Hill', 2: 'And', 3: 'Mountin'}
print("nDictionary with the use of Integers: ")
print(Dict)
# A Dictionary using Mixed keys
Dict = {'Name': 'John', 1: [17, 43, 22, 51]}
print("nDictionary with the use of Mixed Keys: ")
print(Dict)
# A Dictionary using the dict() method
Dict = dict({1: 'London', 2: 'America', 3:'France'})
print("nDictionary with the use of dict(): ")
print(Dict)
# A Dictionary having each item as a Pair
Dict = dict([(1, 'Hello'), (2, 'World')])
print("nDictionary with each item as a pair: ")
print(Dict)
输出: 在执行以上代码后,我们将得到如下所示的输出:
Null dict:
{}
nDictionary with the use of Integers:
{1: 'Hill', 2: 'And', 3: 'Mountin'}
nDictionary with the use of Mixed Keys:
{'Name': 'John', 1: [17, 43, 22, 51]}
nDictionary with the use of dict():
{1: 'London', 2: 'America', 3: 'France'}
nDictionary with each item as a pair:
{1: 'Hello', 2: 'World'}
Python中的Keyerror
当我们尝试访问一个字典中不存在的键时,Python会引发一个Keyerror。它是一个内置的异常类,由与字典或包含键值对的对象进行交互的几个模块引发。现在,我们知道了Python字典是什么以及它是如何工作的。让我们看一下Keyerror的定义。当我们想要访问一个Python字典中不存在的键时,Python会引发一个Keyerror。
映射逻辑是一种将一段数据与其他重要数据相连接的数据结构。当访问该映射但找不到时,就会引发错误。它类似于查找错误,其中语义故障是我们要查找的键不存在于其内存中。它在下面的示例中更好地表示出来。
例如:
让我们举一个示例来了解在Python中如何看到Keyerror。我们取键A、B、C和D的示例,其中D在Python字典中不存在。尽管字典中剩余的键正确显示输出,但D显示了Keyerror。
# Check the Keyerror
ages={'A':45,'B':51,'C':67}
print(ages['A'])
print(ages['B'])
print(ages['C'])
print(ages['D'])
输出: 在执行以上代码后,将会得到以下输出:
45
51
67
Traceback (most recent call last):
File "", line 6, in
KeyError: 'D'
在Python中处理KeyError的机制
遇到KeyError的人都可以负责地处理它。它可以检查特定程序的所有可能输入,并正确处理任何风险项。当我们遇到KeyError时,有几种传统的方法可以处理它。此外,一些方法可以用来处理KeyError的机制。
常规解决方案:.get()方法
根据我们的用例,这些选项中的一些可能更好,或者可能不是我们正在寻找的确切解决方案。然而,最终的目标是防止出现意外的KeyError异常。例如,如果我们在自己的代码中从字典中获得错误,我们可以使用 .get() 方法来获取指定的键或默认值。
例如:
让我们举一个示例来了解如何在Python中处理KeyError的机制。
# List of vehicles and their prices.
vehicles = {"Car=": 300000, "Byke": 115000, "Bus": 250000}
vehicle = input("Get price for: ")
vehicle1 = vehicles.get(vehicle)
if vehicle1:
print("{vehicle} is {vehicle1} rupees.")
else:
print("{vehicle}'s cost is unknown.")
输出: 执行上述代码后,我们将得到如下所示的输出:
Get price for: Car
Car is 300000 rupees.
通用的解决keyerror的方法:使用try-except方法
常见的解决方法是利用 try-except 块来处理这类问题,通过抛出相关代码并提供备用解决方案来解决。
例如:
让我们以一个示例来理解如何应用通用的解决keyerror的方法。
# Creating a dictionary to store items and prices
items = {"Pen" : "12", "Book" : "45", "Pencil" : "10"}
try:
print (items["Book"])
except:
print ("The items does not contain a record for this key.")
输出: 在执行此代码后,将获得如下所示的输出:
45
我们可以看到我们从items中获取了book的值。因此,如果我们要打印任何不在items中的其他键值对,它将打印出这个输出。
# Creating a dictionary to store items and prices
items = {"Pen" : "12", "Book" : "45", "Pencil" : "10"}
try:
print (items["Notebook"])
except:
print ("The items does not contain a record for this key.")
输出: 执行此代码后,我们将获得如下所示的输出:
The items does not contain a record for this key.
结论
现在,我们了解了一些常见的情况,Python的Keyerror异常可能会被抛出,以及几种很好的策略,可以防止它们终止我们的程序。下次我们遇到Keyerror时,我们会知道它很可能是由于错误的字典键查找引起的。通过查看回溯的最后几行,我们可能会获得所有我们需要的信息,以找出问题的来源。
如果问题是我们自己代码中的字典键查找,我们可以使用更安全的 .get() 函数,使用默认返回值来替代直接查询字典上的键。如果我们的代码不会引起问题,那么try-except块是我们控制代码流程的最佳选择。
异常并不一定可怕。如果我们理解它们的回溯信息和错误的根本原因,我们可以利用这些方法使我们的程序更加可预测。