В моей программе python я получаю эту ошибку:
KeyError: 'variablename'
Из этого кода:
path = meta_entry['path'].strip('/'),
Может кто-нибудь объяснить, почему это происходит?
В моей программе python я получаю эту ошибку:
KeyError: 'variablename'
Из этого кода:
path = meta_entry['path'].strip('/'),
Может кто-нибудь объяснить, почему это происходит?
A 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
Я полностью согласен с комментариями по ключевым словам. Вы также можете использовать метод dictionary 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:
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"))]()