No meu programa python, estou recebendo este erro:
KeyError: 'variablename'
Deste código:
path = meta_entry['path'].strip('/'),
Alguém pode explicar por que isso está acontecendo?
meta_entry
e verifique se a chave que você deseja existe.
No meu programa python, estou recebendo este erro:
KeyError: 'variablename'
Deste código:
path = meta_entry['path'].strip('/'),
Alguém pode explicar por que isso está acontecendo?
meta_entry
e verifique se a chave que você deseja existe.
Respostas:
A KeyError
significa em geral a chave não existe. Então, você tem certeza que a path
chave existe?
Dos documentos oficiais do python:
exceção KeyError
Gerado quando uma chave de mapeamento (dicionário) não é encontrada no conjunto de chaves existentes.
Por exemplo:
>>> mydict = {'a':'1','b':'2'}
>>> mydict['a']
'1'
>>> mydict['c']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'c'
>>>
Portanto, tente imprimir o conteúdo meta_entry
e verifique se path
existe ou não.
>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}
Ou você pode fazer:
>>> 'a' in mydict
True
>>> 'c' in mydict
False
path = meta_entry['path'].strip('/'),
faz parte do seu código ou do mecanismo. Se faz parte do motor, receio que nada possa ser feito.
print meta_entry
e verificar se ele contém path
ou não.
Concordo plenamente com os principais comentários de erro. Você também pode usar o método get () do dicionário para evitar as exceções. Isso também pode ser usado para fornecer um caminho padrão, e não None
como mostrado abaixo.
>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
Sim, é provavelmente causado por chave não existente.
No meu programa, usei o setdefault para silenciar esse erro, por questões de eficiência. dependendo de quão eficiente é essa linha
>>>'a' in mydict.keys()
Eu também sou novo no Python. Na verdade, eu acabei de aprender hoje. Então me perdoe pela ignorância da eficiência.
No Python 3, você também pode usar esta função,
get(key[, default]) [function doc][1]
Diz-se que nunca irá gerar um erro de chave.
Isso significa que sua matriz está faltando a chave que você está procurando. Eu trato disso com uma função que retorna o valor, se existir, ou retorna um valor padrão.
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')
Resultado:
1
2
#default
Eu recebi esse erro quando estava analisando dict
com aninhado 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'
Porque no segundo loop deve ser cats[cat]
apenas cat
(o que é apenas uma chave)
Assim:
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])
Dá
black
10
white
8
Por exemplo, se este é um número:
ouloulou={
1:US,
2:BR,
3:FR
}
ouloulou[1]()
É um trabalho perfeito, mas se você usar, por exemplo:
ouloulou[input("select 1 2 or 3"]()
não funciona, porque sua entrada retorna a string '1'. Então você precisa usar int ()
ouloulou[int(input("select 1 2 or 3"))]()
Vamos simplificar se você estiver usando o Python 3
mydict = {'a':'apple','b':'boy','c':'cat'}
check = 'c' in mydict
if check:
print('c key is present')
Se você precisar de mais condição
mydict = {'a':'apple','b':'boy','c':'cat'}
if 'c' in mydict:
print('key present')
else:
print('key not found')
Para o valor da chave dinâmica, você também pode manipular o bloco 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
geralmente significakey
que não existe. Então, você tem certeza de que existe um 'caminho'?