-
TIL.63 try_except 구문의 중요성TIL/Python 2020. 12. 10. 22:37728x90
예외(exception) = 코드를 실행하는 중에 발생한 에러를 뜻함
어떠한 예외가 발생했을 때도 스크립트 실행을 중단하지 않고 계속 실행하게 해주는 예외 처리 방법으로 try, except구문을 사용한다.
참고 :: codermun-log.tistory.com/89
내가 작성한 westagram 프로젝트의 PR 리뷰를 진행하였다.
내가 원하고자하는 로직으로 동작시 예기치 못한 변수가 생길때 -> 예외를 처리해주는 코드를 넣어야 서버가 정상적으로 돌아가며
예외 처리를 제대로 해주지 않으면 예외인 상황이 있음에도 서버가 잘 작동하는 것처럼 보여
어떤한 문제의 원인을 파악하는게 정말 어렵다고 한다.
따라서 생각없는 try, except 문을 사용할 경우
차라리 안 쓰느게 낫다.
예를 들어보자
User.object.get을 실행하는 과정에서 발생할 수 있는 Exception이 User.DoesNotExits 하나만 존재하지는 않을 수도 있다.
그렇기 때문에 코드가 어떤 Exception이 발생해도 대처할 수 있도록 에러를 명확하게 잡아줘야 한다. (반드시)
발생하지 않게 원천적으로 막았을 수도있지만. 만에하나 User.object.get에서 가져온 결과가 두개 이상이라면,
서버에서는 MultipleObjectReturned Exception이 발생할 수 있다.
헌데 이전코드를 따라간다면 이경우에도 멤버가 아니라는 메세지와 함께 400 response가 반환될 수 있습니다.
분명 결과값이 하나가 아니라는 내용의 익셉션인데 에러내용은 멤버가 아니다(유저 테이블에 해당하는 아이디가 없다)라고 답하고있다.
그렇기 때문에 DoesNotExist Exception이 발생했을 경우에만 400에러를 리턴할 수 있도록 해주어야 한다.
docs.djangoproject.com/en/3.1/ref/models/querysets/#django.db.models.query.QuerySet.get
docs.djangoproject.com/en/3.1/ref/exceptions/
추가 : traceback 모듈 이용시 예외 정보를 알 수 있다!!!
- traceback.print_exc() 이렇게 작성 시
예외 정보와 스택 트레이스를 화면에 출력합니다. - traceback.format_exc() 이걸 except내부에 작성 시
format_exc()는 문자열로 반환하여 그 결과를 출력해줍니다.
아래 문서를 참조하시면 좋을 것 같습니다.
docs.python.org/3/library/traceback.html
내가 작성한 로직에서 어떠한 에러아 발생할지를 미리 예상하여 각각의 예외인 상황을 디테일하게 작성하면
어떠한 에러로 인해 발생한 예외인지 원인파악에 굉장히 효율적이다.
따라서 각각의 함수, 메소드 등이 어떠한 예외를 가지고 있는지 파악하고 있어야 한다.
이는 대부분 구글링에서 나오는 자료이므로 발생 에러를 예측하여 예외를 처리해주자 (이게 가장 중요하다)
728x90'TIL > Python' 카테고리의 다른 글
TIL.88 Decorator(토큰 인가)_Unit Test (0) 2021.01.04 TIL.74 삼항 연산자 (0) 2020.12.21 TIL.55 Python 정규표현식 사용하기 (0) 2020.12.03 TIL. 53 CSV 파일 데이터로 집어넣기 (Django, MySQL) (0) 2020.12.01 TIL.52 Bs4와 selenium 을 이용한 크롤링 (0) 2020.11.30 - traceback.print_exc() 이렇게 작성 시