W moim programie Pythona ja dostaję ten błąd:Dostaję Key błąd w Pythonie
KeyError: 'variablename'
Od tego kodu:
path = meta_entry['path'].strip('/'),
Może ktoś proszę wyjaśnić, dlaczego tak się dzieje?
W moim programie Pythona ja dostaję ten błąd:Dostaję Key błąd w Pythonie
KeyError: 'variablename'
Od tego kodu:
path = meta_entry['path'].strip('/'),
Może ktoś proszę wyjaśnić, dlaczego tak się dzieje?
A KeyError
ogólnie oznacza, że klucz nie istnieje. Czy na pewno istnieje klucz path
?
z oficjalnej docs Pythona:
wyjątek KeyError
Raised when a mapping (dictionary) key is not found in the set of existing keys.
Na przykład:
>>> mydict = {'a':'1','b':'2'}
>>> mydict['a']
'1'
>>> mydict['c']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'c'
>>>
Tak, spróbuj wydrukować zawartość meta_entry
i sprawdzić czy path
istnieje lub nie.
>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}
Albo można zrobić:
>>> 'a' in mydict
True
>>> 'c' in mydict
False
hmm ... jak bym to zrobił? (Przepraszam za bycie noobem) Aplikacja jest hostowana na silniku aplikacji Google i nie mam dostępu do żadnych plików, które ona tworzy. – bidluo
Więc nie masz dostępu do kodu Pythona, z którego korzysta aplikacja.? – RanRag
Mam dostęp do mojego kodu, ale żaden z kodu, który on tworzy lub silnik nie używa – bidluo
pełni zgadzam się z kluczowymi uwag o błędach. Można również użyć metody dictionary's get(), aby uniknąć wyjątków. Można to również wykorzystać do podania domyślnej ścieżki zamiast None
, jak pokazano poniżej.
>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
+1 za bardzo trafny komentarz .get(). Wygląda to na dobre zastosowanie Pythona EAFP (łatwiejsze pytanie o przebaczenie niż pozwolenie) zamiast LBYL (Look Before You Leap), który moim zdaniem jest mniej Pythoniczny. –
Tak, najprawdopodobniej jest to spowodowane nieistniejącym kluczem.
W moim programie użyłem setdefault do wyciszenia tego błędu, w celu zwiększenia efektywności. zależności od tego, jak skuteczny jest ten wiersz
>>>'a' in mydict.keys()
Jestem nowy w Pythonie zbyt. W rzeczywistości właśnie tego nauczyłem się dzisiaj. Więc wybacz mi ignorancję skuteczności.
W Pythonie 3, można również korzystać z tej funkcji,
get(key[, default]) [function doc][1]
Mówi się, że nigdy nie podniesie kluczowy błąd.
Metoda get jest starożytna, myślę, że nawet 1.x dyktownicy ją posiadali. Ale jestem pewien, że 2.7 już to miało. –
Oznacza to, że w tablicy brakuje poszukiwanego klucza. Obsługuję to za pomocą funkcji, która albo zwraca wartość, jeśli istnieje, albo zwraca wartość domyślną.
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')
wyjściowa:
1
2
#default
Tak, już to wymyśliłem jakiś czas temu, ale dzięki. – bidluo
Argh ... okropny, okropny, niepytonowy kod. Nie pisz kodu PHP w Pythonie: to nie jest tablica, to słownik (możesz go nazwać hash, ale tablica jest już na miejscu). I: dyktuje już twoją funkcję "keyCheck": zamiast "keyCheck (" key1 ', myarray, "#default") "zrobiłbyś" mydict.get (' key1 ',' #default ') " –
Dla dict, wystarczy użyć
if key in dict
i nie używać
if key in dict.keys()
To będzie czasochłonne
Dostałem ten błąd, kiedy parsowania dict
z zagnieżdżonego 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'
Ponieważ w drugiej pętli powinna być cats[cat]
zamiast tylko cat
(co jest tylko kluczem)
A więc:
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])
Daje
black
10
white
8
'Key error' oznacza generalnie' key' nie istnieje. Czy na pewno istnieje "ścieżka"? – RanRag
Wydrukuj zawartość 'meta_entry' i upewnij się, że klucz istnieje. – Makoto