Django ObjectDoesNotExist 보다 Model.DoesNotExist

BackEnd_Ash.log·2020년 2월 17일
6
raise InvalidSignatureError('Signature verification failed')
jwt.exceptions.InvalidSignatureError: Signature verification failed

여기 에러가 발생하면 ,
secret_key 를 우선적으로 봐야함.
secret_key 에러일 가능성이이 높다.

https://blog.miguelgrinberg.com/post/json-web-tokens-with-public-key-signatures

Account.ObjectDoesNotExist 과 DoesNotExist 차이

https://dev.to/smotko/prefer-model-doesnotexist-over-objectdoesnotexist-in-django-4lb3

에대한 글을 보면 ,
Django 에서 ObjectDoesNotExist 보다 Model.DoesNotExist 를 더 선호 한다고 나와있다.

try:
    user = User.objects.get(pk=1337)
    phone = Team.objects.get(pk=1337)
except ObjectDoesNotExist:
    logging.error("User or Team does not exist")

ObjectDoesNotExist 은 데이터베이스에서 인증에서 user , phone 이 존재하지 않을때 잡는 예외처리이다.

이것을 좀더 좋은 방법이 있는데 ,
모델클래스에서 DoesNotExist 예외처리를 하면 된다.

try:
    user = User.objects.get(pk=1337)
    phone = Phone.objects.get(pk=1337)
except User.DoesNotExist:
    logging.error("User does not exist")
except Phone.DoesNotExist:
    logging.error("Phone does not exist")

이방법이 더 좋은 이유는 두가지가 있는데 ,

  1. 두개의 except 블록은 보다 명확해졌으며 특정 모델이 존재하지 않을 때만 예외를 포착한다.

  2. 이것은 사소한 것이지만 ObjectDoesNotExist 를 현재 범위로 가져왔는지 여부는 걱정할 필요가 없다.

뭐든지 예외처리는 명시적 프로그래밍이 더 유용하다 .

profile
꾸준함이란 ... ?

2개의 댓글

comment-user-thumbnail
2020년 11월 7일

좋은 글 감사합니다!

그런데 혹시 "이것은 사소한 것이지만 ObjectDoesNotExist 를 현재 범위로 가져왔는지 여부는 걱정할 필요가 없다." 라는게 어떤 의미인가요??

1개의 답글