22. 에러 방어하기 1

data_hamster·2023년 4월 26일

학습주제
에러 방어하기

학습내용
지난시간

아무것도 선택하지 않을 경우 KeyError를 발생시킴. 그리고 Choice.DoesNotExist를 넣어준 이유는?
question.choice_set.get(pk=request.POST['choice'])
여기서 없는 초이스를 찾으려 할때 발생하기 때문

그러나 값이 안올라왔으면 안올라왔지 없을꺼 같지는 않아보임.

에러의방어에는 더 많은 상상력이 필요함.

DestNotExist 처리 이유

현재 커피, 녹차가 그려져 있는 상황에서 vote를 누르는 순간에 테이블이 사라진다면? 어드민에서 커피를 삭제해본다


웹페이지는 새로고침 하지 않아 그대로이다. Choice.doesnotexist 처리를 하지 않을 경우 그 결과를 보려고 한다.


이렇게 DoesNotExist가 발생함.


새로고침 하지 않고, 뒤로가기를 눌렀기 때문에 커피가 살아있다.
Except에 Choice.DoesNotExist를 다시 살려놓고 선택해본다.

선택이 없습니다 라는 에러와 함께 화면을 다시 그려주면서 커피가 빠진다.
작은 순간이지만, 삭제된 순간에 이러한 오류가 날 수 있다.


현재는 choice.id인 value가 13으로 잘 들어가 있는데 브라우저의 오류로 30이 들어갔다고 가정해본다. 항상 브라우저가 정상동작하진 않는다. 서버와 정합성이 맞지 않는 데이터가 올라올 수도 있다.


에러메세지 뒤에 현재 어떤 choice.id인지 request.POST['choice']값으로 알려준다.

브라우저에서 올라가는 데이터가 정합성이 안맞을 수도있고, 서버에서 삭제되었을 수도 있기 때문에 이러한 예외처리를 하였다.

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글