[Python & Django] KeyError

이태권 (Taekwon Lee)·2022년 6월 26일
0

[Python]

목록 보기
5/5
post-thumbnail
post-custom-banner

"성 베드로에게 천국의 열쇠를 주는 예수" (피에트로 페루지노, 1482)

KeyError

📝 머릿말

Python의 KeyError

  • 파이썬으로 알고리즘 문제를 풀다가 KeyError가 발생하는 경우가 있다.
>>> ages = {'Kim': 20, 'Lee': 25, 'Park': 23}
>>> ages['Choi']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Choi'

Django의 KeyError

  • 장고에서도 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


📝 일반적인 의미의 KeyError

해당 dictionary에 key가 없을 때

말 그대로 key가 해당 dictionarydictionarysubclass에 없을 때 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라는 dictionaryChoi라는 key가 없기 때문에 발생한 KeyError이다.


📝 다른 경우의 KeyError

표준 라이브러리의 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"

🔖 참고 자료

profile
(Backend Dev.) One step at a time
post-custom-banner

0개의 댓글