[TIL - 6 / Python] Exceptions

haejun-kim·2020년 7월 23일
0

[Python]

목록 보기
12/19

Exception

Exception이란 단어는 한국어로 예외라는 뜻이다. 파이썬에서 "예외"의 상황이란 의도하지 않은 상황을 뜻한다. 그리고 이러한 의도하지 않은 상황이 발생한 것을 exception이 일어났다고 한다.

언제 발생?

Exception은 생각보다 자주 발생할 수 있다. 다음의 예를 보자.

list = [1, 2, 3]

총 요소가 3개인 list가 있다. 하지만 이 list의 4번째 요소를 indexing하게 되면 Error가 발생하게 된다. 만일 사용자가 index가 0부터 시작하는 점을 망각하면 충분히 발생할 수 있는 예외이다. 특히나 유저에게 input값을 받는 경우, 유저가 어떤 형태의 data를 input값으로 넣을지 모르기 때문에 더더욱 예외가 발생할 확률이 높다.

이러한 예외발생에 대한 처리가 중요한 이유는 예외가 발생했을 경우 예외가 발생한 시점의 다음 코드는 실행되지 않고 프로그램이 종료되기 때문이다. 이러한 프로그램 종료가 발생하지 않기 위해서 예외에 대한 처리를 해주는데 이게 try-except 구문이다.

try-except

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

try:이하에는 내가 실행하고 싶은 로직을 구현한다.
except:이하에는 예외가 발생하고 싶은 경우 처리해줄 로직을 구현한다.
finally:이하에는 예외 발생 여부에 관계없이 무조건적으로 실행되는 로직을 구현한다.

catch

Exception은 여러개의 예외 상황을 catch할 수 있다.

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:
        print(f"IndexError가 아닌 다른 종류의 Exception이 발생했습니다")
        elem = -1
    finally:
        print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")

    return elem

IndexError를 catch 할 수 있고, IndexError가 아닌 다른 예외에 대한 처리를 구분할 수 있다.

as

catch할 때 as문을 써서 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

try - else

else문은 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
    else:
        print(f"Exception이 발생하지 않았습니다!") 
    finally:
        print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")

    return elem

0개의 댓글