예전에는 '나는 틀리지 않을테니 예외처리를 할 필요가 없어'라는 생각을 가지고 있었다.
하지만 몇 달전부터 예외처리를 해주려 노력하고 있다.
내가 문제가 없더라도 다른 통신에 의해, 서버에 의해 오류가 생길 수도 있고,
코드가 방대해지니 로직이 꼬이기도 하고
데이터베이스의 이름이나 컬럼명이 달라지기도 했었다.
에러가 발생해도 다른 로직들은 문제없이 실행되어야하기 때문에
에러가 발생할수 있는 곳마다 에러처리를 해야했다.
def chat_ever(chat_count, user):
return chat_count / user
예를 들면 유저들의 평균 채팅수를 구하는 코드이다.
user가 채팅을 쳤으니 user는 0이 될 수 없다고 생각했었다.
하지만 채팅을 친 유저가 탈퇴하여 유저수가 0이 되는 경우가 생긴다면 에러가 발생한다.
분모가 0이 될 수 없기 때문이다.
def chat_ever(chat_count, user):
try:
return chat_count / user
except:
return -1
이 예시에서는 문제가 없지만
한줄이 아니라 여러줄일때 에러의 원인을 못찾을 때가 있었다.
DB 셀렉트 에러인지, 컬럼 에러인지, 업데이트에러인지 문법오류인지 모를때가 있다.
def chat_ever(chat_count, user):
try:
return chat_count / user
except Exception as ex:
print(ex)
return -1
try 구문에서 에러가 발생한다면 Exception으로 에러 이유가 전송이 되고 그걸 확인할 수 있다.
이렇게 한동안 잘 진행하다가 DB 업데이트 에러가 발생한적이 있었다.
확인하려고 했지만 DB업데이트 하는 구간이 엄청 많아서 몇번째 라인에서 에러가 발생한지 확인할 수 없었다.
import traceback
def chat_ever(chat_count, user):
try:
return chat_count / user
except Exception as ex:
print('chat_ever: ', ex)
print(traceback.format_exc())
그래서 traceback 함수를 통해 몇번째 라인에서 에러가 발생한지 확인할 수 있게 해주었다.
모든 경우의 수를 확인하기는 어렵겠지만
그래도 내가 생각할 수 있는 범위내의 에러 경우의 수는 생각해봐야한다.
에러처리는 아직도 배울 점이 많다고 생각한다.
'개발 > 파이썬공부' 카테고리의 다른 글
파이썬 == 과 is 의 차이점, 주소값 (0) | 2023.04.24 |
---|---|
파이썬으로 이미지 확장자 변경하기 (0) | 2023.04.05 |
프로그래머스 '입문' Lv.0 풀이 완료 (0) | 2023.02.18 |
파이썬 := 연산자와 dict()에 대해서 (0) | 2023.02.15 |
댓글