我在 python 中遇到了 Key 错误 [关闭]

2024-12-30 08:42:00
admin
原创
103
摘要:问题描述:在我的python程序中出现这个错误:KeyError: 'variablename' 从此代码中:path = meta_entry['path'].strip('/'), 谁能解释一下为什么会发生这种情况?解决方案 1:AKeyError通常表示密钥不存在。那么,您确定密钥path存在吗?来自官...

问题描述:

在我的python程序中出现这个错误:

KeyError: 'variablename'

从此代码中:

path = meta_entry['path'].strip('/'),

谁能解释一下为什么会发生这种情况?


解决方案 1:

AKeyError通常表示密钥不存在。那么,您确定密钥path存在吗?

来自官方python文档:

异常KeyError

当在现有键集合中找不到映射(字典)键时引发。

例如:

>>> mydict = {'a':'1','b':'2'}
>>> mydict['a']
'1'
>>> mydict['c']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'
>>>

因此,尝试打印内容meta_entry并检查是否path存在。

>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}

或者,你可以这样做:

>>> 'a' in mydict
True
>>> 'c' in mydict
False

解决方案 2:

您也可以使用字典的 get()方法来避免异常。这也可以用于提供默认路径,而不是像None下面这样。

>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None

解决方案 3:

对于字典,只需使用

if key in dict

并且不要使用键列表中的搜索

if key in dict.keys()

后者将会更加耗费时间。

解决方案 4:

如果你使用 Python 3,我们可以简化一下

mydict = {'a':'apple','b':'boy','c':'cat'}
check = 'c' in mydict
if check:
    print('c key is present')

如果你需要其他条件

mydict = {'a':'apple','b':'boy','c':'cat'}
if 'c' in mydict:
    print('key present')
else:
    print('key not found')

对于动态键值,也可以通过try-exception块处理

mydict = {'a':'apple','b':'boy','c':'cat'}
try:
    print(mydict['c'])
except KeyError:
    print('key value not found')
    mydict = {'a':'apple','b':'boy','c':'cat'}

解决方案 5:

是的,这是由于不存在的密钥造成的。

在我的程序中,setdefault出于效率考虑,我习惯于忽略此错误。这取决于此行的效率

>>> 'a' in mydict.keys()

在 Python 3 中,你也可以使用这个函数,

get(key[, default])

功能文档

据说它永远不会引发关键错误。

解决方案 6:

dict当我使用嵌套解析时收到此错误for

cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
    for attr in cat:
        print(cats[cat][attr])

追溯:

Traceback (most recent call last):
      File "<input>", line 3, in <module>
    KeyError: 'K'

因为在第二个循环中应该cats[cat]只是cat(只是一个键)

所以:

cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
    for attr in cats[cat]:
        print(cats[cat][attr])

给予

black
10
white
8

解决方案 7:

这意味着你的字典中缺少你要找的键。我使用一个函数来处理这个问题,如果该键存在,则返回该值,否则返回默认值。

def keyCheck(key, arr, default):
    if key in arr.keys():
        return arr[key]
    else:
        return default


myarray = {'key1':1, 'key2':2}

print keyCheck('key1', myarray, '#default')
print keyCheck('key2', myarray, '#default')
print keyCheck('key3', myarray, '#default')

输出:

1
2
#default

解决方案 8:

例如,如果这是一个数字:

ouloulou={
    1:US,
    2:BR,
    3:FR
    }
ouloulou[1]()

它工作得很好, 如果你使用例如:

ouloulou[input("select 1 2 or 3"]()

它不起作用,因为你的输入返回字符串“1”。所以你需要使用int()

ouloulou[int(input("select 1 2 or 3"))]()
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1603  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1369  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   30  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   28  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   35  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用