python keyerror(0)

11年it研发经验,从一个会计转行为算法工程师,学过C#,c++,java,android,php,go,js,python,CNN神经网络,四千多篇博文,三千多篇原创,只为与你分享,共同成长,一起进步,关注我,给你分享更多干货知识!

本文讲得不是键盘的key,是python字典dict的key

当dict取值时,key在dict的key()中不存在,就会报错

 

python 在读取dictkeyvalue时,如果key不存在,就会触发KeyError错误,如:

Python

t = {
    'a': '1',
    'b': '2',
    'c': '3',
}
print(t['d'])

就会出现:


KeyError: 'd'

第一种解决方法

首先测试key是否存在,然后才进行下一步操作,如:

Python

t = {
    'a': '1',
    'b': '2',
    'c': '3',
}
if 'd' in t:
    print(t['d'])
else:
    print('not exist')

会出现:


not exist

第二种解决方法

利用dict内置的get(key[,default])方法,如果key存在,则返回其value,否则返回default;使用这个方法永远不会触发KeyError,如:

Python

t = {
    'a': '1',
    'b': '2',
    'c': '3',
}
print(t.get('d'))

会出现:


None

加上default参数:

Python

t = {
    'a': '1',
    'b': '2',
    'c': '3',
}
print(t.get('d', 'not exist'))
print(t)

会出现:


not exist
{'a': '1', 'c': '3', 'b': '2'}

第三种解决方法

利用dict内置的setdefault(key[,default])方法,如果key存在,则返回其value;否则插入此key,其valuedefault,并返回default;使用这个方法也永远不会触发KeyError,如:

Python

t = {
    'a': '1',
    'b': '2',
    'c': '3',
}
print(t.setdefault('d'))
print(t)

会出现:


None
{'b': '2', 'd': None, 'a': '1', 'c': '3'}

加上default参数:

Python

t = {
    'a': '1',
    'b': '2',
    'c': '3',
}
print(t.setdefault('d', 'not exist'))
print(t)

会出现:


not exist
{'c': '3', 'd': 'not exist', 'a': '1', 'b': '2'}

第四种解决方法

向类dict增加__missing__()方法,当key不存在时,会转向__missing__()方法处理,而不触发KeyError,如:

Python

t = {
    'a': '1',
    'b': '2',
    'c': '3',
}


class Counter(dict):

    def __missing__(self, key):
        return None
c = Counter(t)
print(c['d'])

会出现:


None

更改return值:

Python

t = {
    'a': '1',
    'b': '2',
    'c': '3',
}


class Counter(dict):

    def __missing__(self, key):
        return key
c = Counter(t)
print(c['d'])
print(c)

会出现:


d
{'c': '3', 'a': '1', 'b': '2'}

第五种解决方法

利用collections.defaultdict([default_factory[,...]])对象,实际上这个是继承自dict,而且实际也是用到的__missing__()方法,其default_factory参数就是向__missing__()方法传递的,不过使用起来更加顺手:
如果default_factoryNone,则与dict无区别,会触发KeyError错误,如:

Python

import collections
t = {
    'a': '1',
    'b': '2',
    'c': '3',
}
t = collections.defaultdict(None, t)
print(t['d'])

会出现:


KeyError: 'd'

但如果真的想返回None也不是没有办法:

Python

import collections
t = {
    'a': '1',
    'b': '2',
    'c': '3',
}

def handle():
    return None
t = collections.defaultdict(handle, t)
print(t['d'])

会出现:


None

如果default_factory参数是某种数据类型,则会返回其默认值,如:

Python

import collections
t = {
    'a': '1',
    'b': '2',
    'c': '3',
}
t = collections.defaultdict(int, t)
print(t['d'])

会出现:


0

又如:

Python

import collections
t = {
    'a': '1',
    'b': '2',
    'c': '3',
}
t = collections.defaultdict(list, t)
print(t['d'])

会出现:


[]

注意:
如果dict内又含有dictkey嵌套获取value时,如果中间某个key不存在,则上述方法均失效,一定会触发KeyError

Python

import collections
t = {
    'a': '1',
    'b': '2',
    'c': '3',
}
t = collections.defaultdict(dict, t)
print(t['d']['y'])

会出现:


KeyError: 'y'

 

### 回答1: 这个错误通常是由于在一个字典中使用了不存在的键导致的。具体而言,当使用类似`my_dict[0]`这样的语句时,如果0不是my_dict的键,则会出现“keyerror:0”的错误。 要解决这个问题,您需要检查代码中使用的键是否正确。您可以使用`my_dict.keys()`方法查看所有可用的键。另外,如果您想在键不存在时不出现错误,可以使用`my_dict.get(0, default_value)`方法,其中default_value是您想返回的默认值。 ### 回答2: Python KeyError: 0 错误通常发生在使用字典时,当我们尝试获取一个不存在的键时,就会引发这个异常。在 Python 的字典中,我们可以通过键访问值,如果该键不存在,则会抛出 KeyError 异常。常见的错误如: ```python my_dict = {'a': 1, 'b': 2, 'c': 3} print(my_dict['d']) ``` 这段代码会输出 KeyError: 'd',因为'd'是不存在于该字典中的键,所以在尝试访问它时,在Python 会抛出 KeyError 异常。 如果我们尝试获取字典中第一个键但没有添加任何键,则会出现 "KeyError: 0" 的错误。如下: ```python my_dict = {} print(my_dict[0]) ``` 这是因为我们尝试获取字典中键为0的值,但它实际上不存在。当尝试访问不存在的键时,Python 会抛出 KeyError 错误。 解决此错误的方法是在尝试访问某个键之前,先验证该键是否存在。我们可以通过使用 get() 方法来解决这个问题。使用 get() 方法时,如果没有找到该键,则默认返回 None,而不是抛出将 KeyError 错误。 ```python my_dict = {} print(my_dict.get(0, "Default Value")) ``` 输出的结果是 “Default Value”,表示0这个键没有被找到,但是由于get()方法中设置了默认返回值为 "Default Value",所以不会报错。 在代码编写过程中,出现错误是常有的事情。因此,处理异常和错误成为我们编写稳定代码的重要技能。在处理字典时,使用 try-except 块并附上 KeyError 错误是一种较为常见的错误处理方案,可以帮助我们预测并处理可能出现的错误。 ### 回答3: Python keyerror: 0 的错误通常是因为在使用字典时,使用了一个不存在的键值。字典是Python中常用的数据类型,它是一种无序的键值对集合。字典的每个键对应一个值,而在使用字典时,我们通过键而不是索引来访问其值。 当我们使用一个不存在的键时,Python 就会抛出 keyerror: 0 的错误。例如,我们有一个字典 {'a': 1, 'b': 2},如果我们尝试获取键值为 0 的值,Python 就会抛出 keyerror: 0 的错误。 解决这个问题,最简单的方法是在访问字典前,先检查字典中是否存在该键。可以通过 in 关键字判断某个键是否存在,例如: if '0' in my_dict: print(my_dict['0']) else: print('key 0 not found') 此外,我们还可以使用字典提供的 get() 方法来获取某个值。get() 方法有两个参数,第一个参数是需要获取的键值,第二个参数是当该键值不存在时返回的默认值。例如: my_dict = {'a': 1, 'b': 2} value = my_dict.get('0', 'default-value') print(value) 如果键值 0 不存在于 my_dict 中,那么 value 将被赋值为 'default-value'。 如果我们确定要访问不存在的键值,并希望在出现错误时直接结束程序,我们可以使用 try-except 语句来捕获 keyerror: 0 的错误。例如: try: value = my_dict['0'] print(value) except KeyError: print('key 0 not found, program terminated') 在这个例子中,我们尝试访问 my_dict 中的键值为 0 的键,并在出现错误时输出一条错误信息并结束程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值