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

2024-12-30 08:42:00
admin
原创
101
摘要:问题描述:在我的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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用