[TIL] Exceptions

haileeyu21·2020년 11월 22일
0

[ TIL ]

목록 보기
16/40
post-thumbnail

의도하지 않은 에러가 일어나는 경우, 이러한 예외 상황(exception)에 대한 처리를 해줘야 한다

예외상횡에 대한 별다른 처리를 하지 않은 경우,
exception이 발생하면, 발생한 코드 위치에서 다음 코드가 실행되지 않고
바로 프로그램이 종료하게 된다.

하지만 exception이 발생해도 프로그램을 종료하지않고,
다른 로직을 실행하게 할 수 있는데
이를 예외 처리, Exception handling이라 한다!

try:
     문장1
     문장2
     ...
     문장N    
except Exception:
     exception이 났을 경우 실행할 예외 처리코드
finally:
     Exception 여부와 상관없이 항상 마지막에 실행되는 코드

늘 내가 말하던, 예외처리 할 줄 몰라요.. 예외처리 안했어요.. 라는 말
이젠 안할 수 있으려나

사실 프로그램이 종료되고 말고가 문제가 아니라,
게시물 등록 도중 에러가 났다면?
해당 게시물로 이미 등록된 pk가 있는데 완전하게 등록된 것이 아니기 때문에
다시 게시물 등록을 하려 하면 계속 충돌이 일어난다
이미 pk는 존재한다고!
(뼈저린 경험담)

def return_elem_or_minus_one(index):
    short_list = [1, 2, 3]
    elem = 0


    try:
        elem = short_list[index]
        print("이 문장은 exception이 발생되면 실행되지 않습니다!")
    except IndexError:
        print(f"이 문장은 Exception이 발생하면 실행 됩니다")
        elem = -1
    finally:
        print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")


    return elem


return_elem_or_minus_one(1)
> 이 문장은 exception이 발생되면 실행되지 않습니다!
이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!
2


return_elem_or_minus_one(4)
> 이 문장은 Exception이 발생하면 실행 됩니다
이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!
-1

우리가 예측할 수 없는 값을 입력받는 경우, indexError가 생겼을 경우 위와 같이 처리할 수 있다!

try 문에서는 정상 작동한 경우의 로직을,
exception문에서는 에러가 난 경우의 로직을 실행한다

def return_elem_or_minus_one(index):
    short_list = [1, 2, 3]
    elem = 0


    try:
        elem = short_list[index]
        print("이 문장은 exception이 발생하지 않으면 실행됩니다")
    except IndexError:
        print(f"이 문장은 Exception이 발생하면 실행 됩니다")
        elem = -1
    except Exception as e:
        print(f"IndexError가 아닌 다른 종류의 Exception이 발생했습니다 ==> {e}")
        elem = -1
    finally:
        print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")


    return elem

👆🏻 이전 예제처럼 특정 예외 상황을 처리할 수도 있고, 모든 상황에 대해서 처리할 수도 있다.
exception catch의 경우 as 문을 사용해서 해당 예외상황의 객체를 받아서 정보를 더 얻을 수 있다

def return_elem_or_minus_one(index):
    short_list = [1, 2, 3]
    elem = 0


    try:
        elem = short_list[index]
        print("이 문장은 exception이 발생하지 않으면 실행됩니다")
    except IndexError:
        print(f"이 문장은 Exception이 발생하면 실행 됩니다")
        elem = -1
    except Exception as e:
        print(f"IndexError가 아닌 다른 종류의 Exception이 발생했습니다 ==> {e}")
        elem = -1
    else:
        print(f"Exception이 발생하지 않았습니다!") 
    finally:
        print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")


    return elem

또한 try 문에서도 else를 사용할 수 있는데 이는 exception이 나지 않았을 경우 실행된다

profile
욕심많은 주니어 웹 개발자🐷😎👊🏻🔥 빠이팅입니다

0개의 댓글