코드상의 오류로 발생할 수 있는 예외에 대한 처리에 대해 알아보자.
try ~ except 문
발생한 예외를 잡아서 프로그램이 중지되지 않고, 작성한 코드 대로 이어나갈 수 있게 하는 오류 처리 구문으로, 자바에서는 try~catch문을 사용하지만 파이썬에서는 'try ~ except'를 사용하여 예외처리한다.
-
try문은 예외가 발생할 수 있는 사항들을 작성하는 곳이고,
except는 try문에서 예외 발생 시 잡아내는 구문으로 뒤에 잡아낼 예외 클래스를 써준다. -
except문에서 예외 클래스를 명시하지 않을 경우, 모든 예외를 잡아낸다. 또한 추가적으로 try~except문에는 else문을 삽입하여 예외가 발생하지 않을 경우 작동 할 수 있도록 흐름제어가 가능하다.
예외 발생시키기 및 예외클래스 제어
예외를 강제로 발생시키기 위해서는 'raise 예외 클래스()'라는 키워드를 사용하며, 이때 예외클래스의 init메서드가 호출된다. 해당 예외 객체는 'except 예외 클래스 as 객체 변수명'을 통해 제어할 수 있게 된다.
예외 클래스 만들기
예외 클래스를 직접 만들기 위해서는 Exception클래스를 상속받아서 만들어야 한다.
또한 raise를 통해 예외를 발생시킬 때 해당 클래스의 init메서드를 호출하게 되므로,
init메서드를 정의하고 그 안에 ‘Exception._ _ init _ _(self)’를 호출해야한다.
Finally
예외처리 시 예외가 발생하던, 발생하지 않던 간에 무조건 실행 될 수 있게 하는 구문으로 파일 등을 닫거나 할 때 사용.
with
try~finally문에서 처리하는 일반적인 처리방식을 자동적으로 지원해주는 문으로, enter, exit메서드에 의해 자동적으로 다루어질 수 있는 경우에만 사용할 수 있다.
with문은 파일처리나 DB처리등의 반복적으로 열고 닫는등의 작업을 할 때 유용하게 쓰일 수 있다. 위 예시같은 경우 with문을 진입하면서 open()하고 빠져나갈때 자동적으로 close()해주게 된다.