Відповіді:
KeyError
Зазвичай означає , що ключ не існує. Отже, ви впевнені, що 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
path = meta_entry['path'].strip('/'),
- це частина вашого коду чи двигуна. Якщо це частина двигуна, я боюся, що нічого не можна зробити.
print meta_entry
і перевірити, чи містить він path
чи ні.
Я повністю згоден з ключовими коментарями про помилки. Ви також можете використовувати метод get () словника, щоб уникнути винятків. Це також може бути використане для надання шляху за замовчуванням, а не None
як показано нижче.
>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
Так, це, швидше за все, викликано неіснуючим ключем.
У своїй програмі я використовував 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')
Для значення динамічного ключа ви також можете управляти через блок виключення спробу
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
не існує. Отже, ви впевнені, що "шлях" існує?