[Python] Exceptions

Kook Han·2020년 6월 7일
0

Python

목록 보기
12/13

의도치 않은 에러가 발생하는 경우를 예외 상황이라고 한다.
아래 예시를 살펴보자

short_list = [1, 2, 3]
fourth_element = short_list[3]
> 
IndexError                                Traceback (most recent call last)
<ipython-input-2-54d383a36828> in <module>()

파이썬의 인덱스가 0으로부터 시작한다는 점을 깜박했으면 위와 같은 에러를 볼 수 있을 것이다.

파이썬에서는 에러가 발생할 경우 바로 프로그램이 종료되게 되있는데, 프로그램의 input 값으로 항상 올바른 값만 넣을 수는 없다는 점을 고려하면 에러가 발생하더라도 프로그램이 계속 실행되도록 하는 것이 더 현실적일 것이다.

에러 상황에 조치할 수 있도록 파이썬에서는 try와 except, finally 기능을 제공한다.

try:
     문장1
     문장2
     ...
     문장N    
except Exception:
     exception이 났을 경우 실행할 예외 처리코드
finally:
     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
    finally:
        print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")

    return elem

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

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

문장이 에러 없이 실행된다면 try 구문의 문구가 출력되고, IndexError가 발생하면 except 구문이 실행되는 것을 알 수 있다. 또한 finally 구문은 에러와는 상관없이 실행되는 것을 확인할 수 있다.

except 구문은 여러 에러를 캐치할 수도 있다. 또한 아래와 같이 except 뒤에 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:
        print(f"IndexError가 아닌 다른 종류의 Exception이 발생했습니다")
        elem = -1
    finally:
        print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")

    return elem

아래와 같이 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개의 댓글