Exception의 사전적 의미는 "예외"입니다.
Python에서 "예외" 상황은 의도하지 않은 에러가 일어나는 경우를 뜻합니다.
Exception은 의외로 생각보다 자주 일어날 수 있습니다.
다음과 같은 list로 예를 들어 보겠습니다.
>>> short_list=[1,2,3]
길이가 3이므로 4번째 요소를 indexing 하게 되면 IndexError가 납니다.
>>> fourth_el = short_list[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Exception이 발생하면, 발생한 코드 위치에서 다음 코드들이 실행되지 않고 곧바로 프로그램이 종료하게 됩니다.
하지만 exception이 발생해도 해당 프로세스가 종료하지 않고 대신에 다른 로직을 실행하게 한 후 프로그램을 계속 실행하게 할 수 있습니다.
이것을 Exception handling이라고 합니다.
예를 들어, 유저가 잘못된 값을 input으로 입력해서 exception이 일어났다고 해도, 종료하지 않고 유저에게 메세지를 return하는 것입니다.
Exception handling은 try except 구문을 사용해서 실행합니다.
문법은 다음과 같습니다.
try:
문장1
문장2
...
문장N
except Exception:
exception이 났을 경우 실행할 예외 처리코드
finally:
Exception 여부와 상관없이 항상 마지막에 실행되는 코드
앞서 보았던 예제에서 만일 IndexError가 났을 경우, 프로그램을 종료하는 대신 에러 메세지를 출력하고 -1을 return하기 위해서는 다음과 같이 Exception handling을 해줍니다.
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"이 문장은 IndexError가 발생되면 실행됩니다")
elem = -1
except Exception as e:
print(f"IndexError가 아닌 다른 종류의 Exception이 발생했습니다 => {e}")
elem = -1
else:
print(f"Exception이 발생하지 않았습니다!")
finally:
print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")
return elem
경우를 하나하나 살펴보겠습니다.
try:
Exception이 발생하지 않으면 실행됩니다.
except IndexError:
IndexError가 발생하면 실행됩니다.
except Exception as e
IndexError가 아닌 다른 Exception이 발생한 경우, e라는 이름으로 그 Exception이 무엇인지 저장합니다. 그뒤 아래 코드가 실행됩니다.
else:
Exception이 발생하지 않은 경우 실행됩니다.
finally:
Exception 여부에 상관없이 실행됩니다.
Exception이 발생하지 않으면 try
, else
, finally
가 실행되고
Exception의 종류에 따라 except
가 실행됩니다.