ในโปรแกรมไพ ธ อนของฉันฉันได้รับข้อผิดพลาดนี้:
KeyError: 'variablename'
จากรหัสนี้:
path = meta_entry['path'].strip('/'),
ใครช่วยอธิบายหน่อยได้ไหมว่าทำไมสิ่งนี้ถึงเกิดขึ้น
meta_entry
และให้แน่ใจว่ากุญแจที่คุณต้องการมีอยู่
ในโปรแกรมไพ ธ อนของฉันฉันได้รับข้อผิดพลาดนี้:
KeyError: 'variablename'
จากรหัสนี้:
path = meta_entry['path'].strip('/'),
ใครช่วยอธิบายหน่อยได้ไหมว่าทำไมสิ่งนี้ถึงเกิดขึ้น
meta_entry
และให้แน่ใจว่ากุญแจที่คุณต้องการมีอยู่
คำตอบ:
KeyError
โดยทั่วไปหมายถึงที่สำคัญไม่ได้อยู่ ดังนั้นคุณแน่ใจหรือว่ามีpath
กุญแจอยู่?
จาก python docs อย่างเป็นทางการ:
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
path = meta_entry['path'].strip('/'),
นั้นเป็นส่วนหนึ่งของรหัสหรือเอ็นจิ้นของคุณ ถ้าเป็นส่วนหนึ่งของเครื่องยนต์ฉันกลัวว่าจะไม่มีอะไรทำ
print meta_entry
และตรวจสอบว่ามีpath
หรือไม่
ฉันเห็นด้วยอย่างเต็มที่กับความคิดเห็นข้อผิดพลาดที่สำคัญ คุณสามารถใช้วิธีการ get () ของพจนานุกรมได้เช่นกันเพื่อหลีกเลี่ยงข้อยกเว้น นอกจากนี้ยังสามารถใช้เพื่อให้เส้นทางเริ่มต้นมากกว่าNone
ที่แสดงด้านล่าง
>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
สำหรับ dict เพียงใช้
if key in dict
และไม่ใช้การค้นหาในรายการคีย์
if key in dict.keys()
หลังจะใช้เวลามากขึ้น
ใช่มันเป็นไปได้มากที่สุดที่เกิดจากกุญแจไม่อยู่
ในโปรแกรมของฉันฉันใช้ setdefault เพื่อปิดเสียงข้อผิดพลาดนี้สำหรับความกังวลด้านประสิทธิภาพ ขึ้นอยู่กับประสิทธิภาพของสายนี้
>>>'a' in mydict.keys()
ฉันยังใหม่กับ Python เช่นกัน อันที่จริงฉันเพิ่งเรียนมาวันนี้ ดังนั้นยกโทษให้ฉันในความไม่รู้ของประสิทธิภาพ
ใน Python 3 คุณสามารถใช้ฟังก์ชั่นนี้
get(key[, default]) [function doc][1]
มันบอกว่ามันจะไม่ทำให้เกิดข้อผิดพลาดที่สำคัญ
ซึ่งหมายความว่าอาร์เรย์ของคุณไม่มีคีย์ที่คุณกำลังค้นหา ฉันจัดการกับฟังก์ชันที่คืนค่าถ้ามันมีอยู่หรือมันคืนค่าเริ่มต้นแทน
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
ฉันได้รับข้อผิดพลาดนี้เมื่อฉันแยกวิเคราะห์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
ตัวอย่างเช่นถ้านี่เป็นตัวเลข:
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"))]()
ให้เราทำให้ง่ายขึ้นถ้าคุณใช้ 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'}
Key error
โดยทั่วไปหมายถึงkey
ไม่มี ดังนั้นคุณแน่ใจหรือไม่ว่า 'เส้นทาง' มีอยู่จริง?