내 파이썬 프로그램 에서이 오류가 발생합니다.
KeyError: 'variablename'
이 코드에서 :
path = meta_entry['path'].strip('/'),
왜 이런 일이 일어나고 있는지 설명해 주시겠습니까?
답변
A는 KeyError
일반적으로 키가 존재하지 않는 것을 의미한다. path
열쇠가 있는지 확실 합니까?
공식 파이썬 문서에서 :
예외 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
답변
주요 오류 의견에 전적으로 동의합니다. 예외를 피하기 위해 사전의 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 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 (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"))]()