Я получаю ошибку ключа в python

В моей программе python я получаю эту ошибку:

KeyError: 'variablename'

Из этого кода:

path = meta_entry['path'].strip('/'),

Может кто-нибудь объяснить, почему это происходит?

Ответ 1

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

Ответ 2

Я полностью согласен с комментариями по ключевым словам. Вы также можете использовать метод dictionary get(), чтобы избежать исключений. Это также можно использовать для указания пути по умолчанию, а не None, как показано ниже.

>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None

Ответ 3

Для dict, просто используйте

if key in dict

и не использовать

if key in dict.keys()

Это займет много времени

Ответ 4

Да, скорее всего, это вызвано не существующим ключом.

В моей программе я использовал setdefault для отключения этой ошибки для обеспечения эффективности. в зависимости от того, насколько эффективна эта строка

>>>'a' in mydict.keys()  

Я тоже новичок в Python. На самом деле я только что узнал об этом сегодня. Так простите меня по незнанию эффективности.

В Python 3 вы также можете использовать эту функцию,

get(key[, default]) [function doc][1]

Говорят, что он никогда не вызовет ключевую ошибку.

Ответ 5

Это означает, что в вашем массиве отсутствует ключ, который вы ищете. Я обрабатываю это с помощью функции, которая либо возвращает значение, если оно существует, либо возвращает значение по умолчанию.

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

Ответ 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:

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

Например, если это число:

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"))]()