Я получаю Ключевую ошибку в питоне

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

<code>KeyError: 'variablename'
</code>

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

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

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

 RanRag12 апр. 2012 г., 04:13
Key error обычно означаетkey не существует. Итак, вы уверены, что «путь» существовать.?
 Makoto12 апр. 2012 г., 04:14
Распечатать содержимоеmeta_entry и убедитесь, что ключ, который вы хотите, существует.

Ответы на вопрос(6)

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

>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
 24 апр. 2012 г., 13:08
+1 за очень актуальный комментарий .get (). Выглядит как хорошее приложение Python EAFP (проще просить прощения, чем разрешения) вместо LBYL (смотри, прежде чем прыгнуть), которое, я думаю, менее питонское.

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

def keyCheck(key, arr, default):
    if key in arr.keys():
        return arr[key]
    else:
        return default


myarray = {&apo,s;key1':1, 'key2':2}

print keyCheck('key1', myarray, '#default')
print keyCheck('key2', myarray, '#default')
print keyCheck('key3', myarray, '#default')

Выход:

1
2
#default
 David Liaw02 авг. 2013 г., 03:09
Да, я уже понял это некоторое время назад, но все равно спасибо.
 21 февр. 2017 г., 10:21
Аааа ... ужасный, ужасный пифонический код. Не пишите PHP-код на Python: это не массив, это словарь (вы можете назвать его хешем, но массив не уместен). И: у dicts уже есть ваш "keyCheck" функция: вместо «keyCheck (« key1 », myarray,« # default ») & quot; вы "сделаете" mydict.get ("key1", "# default") & quot;

if key in dict

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

if key in dict.keys()

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

 12 сент. 2018 г., 15:42
Это самое элегантное решение.

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

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

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

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

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

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

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

 21 февр. 2017 г., 10:22
Метод get древний, я думаю, что даже 1.x dicts имел его. Но я уверен, что у 2.7 уже было это.
Решение Вопроса

KeyError обычно означает, что ключ не существует. Итак, вы уверены, чтоpath ключ существует?

Из официальных документов Python:

exception KeyError

Raised when a mapping (dictionary) key is not found in the set of existing keys.

Например:

>>> 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
 David Liaw12 апр. 2012 г., 04:49
хм ... как бы я это сделал? (Извините за то, что я новичок) Приложение размещено на движке приложений Google, и у меня нет доступа ни к каким файлам, которые оно создает.
 David Liaw15 апр. 2012 г., 06:56
Это часть моего кода
 David Liaw12 апр. 2012 г., 07:22
У меня есть доступ к моему коду, но ни один из кода, который он создает или использует движок
 12 апр. 2012 г., 04:53
Итак, у вас нет доступа к коду Python, который использует приложение.
 12 апр. 2012 г., 07:24
Итак, код, который вы разместилиpath = meta_entry['path'].strip('/'), это часть вашего кода или движка. Я боюсь, что если это часть двигателя, ничего не поделаешь.

Ваш ответ на вопрос