[python] 파이썬에서 키 오류가 발생합니다.

내 파이썬 프로그램 에서이 오류가 발생합니다.

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