"성 베드로에게 천국의 열쇠를 주는 예수" (피에트로 페루지노, 1482)
KeyError
가 발생하는 경우가 있다.>>> ages = {'Kim': 20, 'Lee': 25, 'Park': 23}
>>> ages['Choi']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Choi'
Json
응답을 생성하면서 예외 조건으로 KeyError
를 발생시켜야 경우가 있다.from django.views import View
from django.http import JsonResponse
class SignUpView(View):
def post(self, request):
try:
.
.
.
return JsonResponse({'message': 'SUCCESS'}, status=201)
except KeyError:
return JsonResponse({'message':'KEY_ERROR'}, status=400)
KeyError
에 대해서 생각하지 않고 무작정 입력만 해 온 것 같다.KeyError
가 무엇일까?그런데, 정확히 KeyError
가 무엇이고, 언제 발생시켜야 하는지 한번 짚어보고 넘어가면 어떨까 해서 블로그를 작성해 보았다.
- 파이썬의
dicitonary
는 말 그대로 사전처럼 '단어'와 '의미'의 두 가지 형태를 갖는 자료형이다.- 여기서 '단어'는
key
, '의미'는value
라 한다.- 중괄호
{}
로 묶이며,
로 요소가 구별된다.dic = {'key1': 'value1', 'key2': 'value2', ...}
형태를 갖는다
dic = {'key1': 'value1', 'key2': 'value2', ...}
python에는 dictionary
라는 배열이 있다.
(javascript에서는 object
)
dictionary
말 그대로 key
가 해당 dictionary
나 dictionary
의 subclass
에 없을 때 KeyError
가 뜬다. 혹은
머릿말에서 언급한 파이썬의 KeyError
를 다시 보자.
>>> ages = {'Kim': 20, 'Lee': 25, 'Park': 23}
>>> ages['Choi']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Choi'
ages
라는 dictionary
에 Choi
라는 key
가 없기 때문에 발생한 KeyError
이다.
드문 경우에 파이썬 표준 라이브러리에서 발생한다고 한다.
자세한 내용은 이 사이트를 참고하자
아래는 위 링크의 zipfile
모듈에 대한 에러를 가지고 왔다.
>>> from zipfile import ZipFile
>>> zip_file = ZipFile('the_zip_file.zip')
>>> zip_file.getinfo('something')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/path/to/python/installation/zipfile.py", line 1304, in getinfo
'There is no item named %r in the archive' % name)
KeyError: "There is no item named 'something' in the archive"