Python KeyError異常的原因及問題解決
什么是 KeyError 異常?
在 Python 中,KeyError 異常是內(nèi)置異常之一,具體來說,KeyError 是當(dāng)試圖獲取字典中不存在的鍵時(shí),引發(fā)的異常。作為參考,字典是一種將數(shù)據(jù)存儲(chǔ)在鍵值對中的數(shù)據(jù)結(jié)構(gòu),字典中的 value 是通過其 key 獲取的。
Python KeyError 常見原因及示例
以國家及其首都的字典作為例子:
dictionary_capitals = {'BeiJing': 'China', 'Madrid': 'Spain', 'Lisboa': 'Portugal', 'London': 'United Kingdom'}
要在字典中搜索信息,需要在括號中指定 key,Python 將返回相關(guān)的 value。
dictionary_capitals['BeiJing']
'China'
如果獲取一個(gè)在字典中沒有的 key,Python 將會(huì)拋出 KeyError 異常錯(cuò)誤信息。
dictionary_capitals['Rome']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Rome'
嘗試獲取其他 Python 字典中不存在的 key 時(shí),也會(huì)遇到這樣的異常。例如,系統(tǒng)的環(huán)境變量。
# 獲取一個(gè)不存在的環(huán)境變量 os.environ['USERS'] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/os.py", line 679, in __getitem__ raise KeyError(key) from None KeyError: 'USERS'
處理 Python KeyError 異常
有兩種策略去處理 KeyError 異常 ,一是避免 KeyError,二是捕獲 KeyError。
防止 KeyError
如果嘗試獲取不存在的 key 時(shí),Python 會(huì)拋出 KeyError。為了防止這種情況,可以使用 .get() 獲取字典中的鍵,使用此方法遇到不存在的 key,Python 將會(huì)返回 None 而不是 KeyError。
print(dictionary_capitals.get('Prague'))
None
或者,可以在獲取 key 之前檢查它是否存在,這種防止異常的方法被稱為 “Look Before You Leap”,簡稱 LBYL, 在這種情況下,可以使用 if 語句來檢查鍵是否存在,如果不存在,則在 else 子句中處理。
capital = "Prague" if capital in dictionary_capitals.keys(): value = dictionary_capitals[capital] else: print("The key {} is not present in the dictionary".format(capital))
通過異常處理捕獲 KeyError
第二種方法被稱為 “Easier to Ask Forgiveness Than Permission”,簡稱 EAFP,是 Python 中處理異常的標(biāo)準(zhǔn)方法。
采用 EAFP 編碼風(fēng)格意味著假設(shè)存在有效的 key,并在出現(xiàn)錯(cuò)誤時(shí)捕獲異常。LBYL 方法依賴于 if/else 語句,EAFP 依賴于 try/except 語句。
下面示例,不檢查 key 是否存在,而是嘗試獲取所需的 key。如果由于某種原因,該 key 不存在,那么只需捕獲 except 子句中的 KeyError 進(jìn)行處理。
capital = "Prague" try: value = dictionary_capitals[capital] except KeyError: print("The key {} is not present in the dictionary".format(capital))
Python 高階處理 KeyError
使用 defaultdict
Python 在獲取字典中不存在的 key 時(shí),會(huì)返回 KeyError 異常。.get() 方式是一種容錯(cuò)方法,但不是最優(yōu)解。
Collections 模塊提供了一種處理字典更好的方法。與標(biāo)準(zhǔn)字典不同,defaultdict 獲取不存在的 key ,則會(huì)拋出一個(gè)指定的默認(rèn)值,
from collections import defaultdict # Defining the dict capitals = defaultdict(lambda: "The key doesn't exist") capitals['Madrid'] = 'Spain' capitals['Lisboa'] = 'Portugal' print(capitals['Madrid']) print(capitals['Lisboa']) print(capitals['Ankara'])
Spain
Portugal
The key doesn't exist
到此這篇關(guān)于Python KeyError異常的原因及問題解決的文章就介紹到這了,更多相關(guān)Python KeyError異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)異常值自動(dòng)檢測的案例分享
在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)中,異常值的檢測是一個(gè)關(guān)鍵步驟,它有助于識別數(shù)據(jù)中的異常模式和離群點(diǎn),本文將介紹Python中異常值檢測的實(shí)戰(zhàn)案例,使用一些常見的技術(shù)和庫,為大家提供全面的示例代碼和詳細(xì)解釋2024-01-01numpy.linalg.eig() 計(jì)算矩陣特征向量方式
今天小編就為大家分享一篇numpy.linalg.eig() 計(jì)算矩陣特征向量方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11用Python進(jìn)行數(shù)據(jù)清洗以及值處理
這篇文章主要介紹了用Python進(jìn)行數(shù)據(jù)清洗以及值處理,數(shù)據(jù)分析中,數(shù)據(jù)清洗是一個(gè)必備階段。數(shù)據(jù)分析所使用的數(shù)據(jù)一般都很龐大,致使數(shù)據(jù)不可避免的出現(xiàn)重復(fù)、缺失、異常值等異常數(shù)據(jù),如果忽視這些異常數(shù)據(jù),可能導(dǎo)致分析結(jié)果的準(zhǔn)確性,需要的朋友可以參考下2023-07-07python中subprocess實(shí)例用法及知識點(diǎn)詳解
在本篇文章里小編給大家分享的是關(guān)于python中subprocess實(shí)例用法及知識點(diǎn)詳解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。2021-10-10Facebook開源一站式服務(wù)python時(shí)序利器Kats詳解
這篇文章主要為答案及介紹了Facebook開源一站式服務(wù)python時(shí)序利器Kats的功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11Python中連接不同數(shù)據(jù)庫的方法總結(jié)
在數(shù)據(jù)驅(qū)動(dòng)的現(xiàn)代應(yīng)用開發(fā)中,Python憑借其豐富的庫和強(qiáng)大的生態(tài)系統(tǒng),成為連接各種數(shù)據(jù)庫的理想編程語言,下面我們就來看看如何使用Python實(shí)現(xiàn)連接常用的幾個(gè)數(shù)據(jù)庫吧2025-02-02