둘은 정확히 무슨 차이야..? 🧐
python 공식문서에서 설명하는 KeyError
는 아래와 같다.
클라이언트가 서버에게 JSON 형태로 데이터를 넘겨주면,
나는 django를 통해 이를 dict 형태 - {key:value}
로 변환한다.
회원가입/로그인 api 를 만들 때 사용자가 필요한 key값을 입력하지 않으면 KeyError
를 raise해 필요한 value값을 모두 받을 수 있도록 설정하는 것이다.
python과 django에서 제공하는 예외/에러는 다르다.
"Django raises some of its own exceptions as well as standard Python exceptions"
DoesNotExist 또한 예외/에러인데, 이는 python이 아닌 django에서 제공하는 예외다.
ObjectDoesNotExist
는 django.core.exceptions에서 정의하는 클래스 중 하나로,model.DoesNotExist
의 base class다model.DoesNotExist
는 ORM이 raise하는 에러다. 즉 get()
을 사용해서 database 데이터를 조회할 때, 해당 인스턴스가 없을 경우 발생한다. (MultipleObjectsReturned는 반대의 경우라 할 수 있겠다)#User에 인스턴스(id -999)가 없을 경우,
User.objects.get(id=-999)
>>> User.DoesNotExist
#2개 이상의 인스턴스가 발생하는 경우
User.objects.get(last_name="홍")
>>> User.MultipleObjectsReturned
그래서 DoesNotExist
를 다루고 싶으면, try-except문
으로 잡거나
아예 ObjectDoesNotExist
를 import하면 된다. (예시 출처: django documentation)
from django.core.excpetions import ObjectDoesNotExist
try:
blog = Blog.objects.get(id=1)
entry = Entry.objects.get(blog=blog, entry_number=1)
except ObjectDoesNotExist:
print("Either the blog or entry doesn't exist.")
참고 문서
https://docs.python.org/ko/3/library/exceptions.html#KeyError
https://docs.djangoproject.com/en/4.0/ref/exceptions/