2019/01/29 - [Language/Python] - [Python 따라하기]1. Python 설치하기

2019/02/05 - [Language/Python] - [Python 따라하기]2. 자료형_part 1(String, Int,Float, List)

2019/02/12 - [Language/Python] - [Python 따라하기]3. 자료형_part 2(Tuple,Set,Dictionary)

2019/02/19 - [Language/Python] - [Python 따라하기]4.조건문

2019/02/26 - [Language/Python] - [Python 따라하기]5. 반복문(For, While, break, continue)

2019/03/05 - [Language/Python] - [Python 따라하기]6. 함수만들기(def, print, format)

2019/03/12 - [Language/Python] - [Python 따라하기]7.파일 입출력 (File I/O)

2019/03/19 - [Language/Python] - [Python 따라하기]8.클래스와 상속(Class, inheritance)


예외 처리

프로그램을 만들다 보면 많은 오류를 만난다. 오류가 발생하는 이유는 프로그램이 올바르게 동작되도록 해주는 파이썬의 능력이다. 하지만 가끔은 이러한 오류를 무시하고 싶을 때도 있다. 이러한 기능은 파이썬은 try,except를 이용해서 오류를 처리 해줄 수 있다.

자주 발생하는 에러

오류를 처리하는 방법을 알기 전에 자주 발생하는 에러들에 대해 알아보자.

IndexError

프로그래밍을 하면서 가장 많이 만날 에러이다. 파이썬은 iterable한 객체에 인덱스로 접근을 할 수 있는데 iterable한 객체보다 더 큰 크기의 인덱스로 접근을 할 때 발생한다.

ZeroDivisionError

숫자 0으로 나누었을 때 발생하는 에러이다.

SyntaxError

구문오류로써 이미 프로그래밍 언어에서 고안해둔 것에 대해서 문제가 발생할 때이다. 주로 괄호를 열었으나 닫지 않은 경우에 발생한다.

TypeError

연산, 함수가 계산할 때 데이터의 유형이 잘못되었을 때 발생한다.

오류 처리하기

오류 처리는 다음과 같이 수행을 한다.
try:
<<코드>>
except (발생 오류(as 오류 변수)):
<<코드>>

우선 try 내부에 있는 코드를 수행하고 이를 수행하다가 오류가 발생하면 except 블록이 수행된다. 하지만 try블록에서 오류가 발생하지 않는다면 except 블록은 수행되지 않는다.

except 구문을 보면 ()를 사용한 부분이 있는데 그 부분은 생략해도 무관한 부분이다.
따라서 except를 사용하는 방법에 따라서 다음과 같이 나뉘어진다.

1.try,except만 있을 경우

try에서 오류가 발생한 경우 except로 넘어간다.

2.발생오류가 포함되어 있을 경우

적어둔 발생오류가 발생했을 경우에만 except문으로 이동한다.

3.발생오류와 오류변수까지 적은 경우

이러한 경우엔 오류변수에 오류 메세지의 내용이 담겨진다.


Try,Finally

try문은 finally를 사용할 수 있는데, finally는 try문 수행 도중 예외 사항이 발생하지 않더라도 항상 수행된다. 보통 파일을 오픈 한 것을 다시 닫아야 할 때 사용한다.


오류가 여러개 발생했을 경우

오류를 여러개 처리주려고 할 경우 단순히 except를 여러 개 사용하는 것이 아니라 튜플로 묶어서 처리해줘야 한다.

아래와 같은 경우 인덱스 에러가 먼저 발생해서 ZeroDivisionError에 들어가지 않는다.


오류를 일부러 발생시킬 경우

오류를 일부러 발생시키는 것이 이상하게 들릴 수 있지만 종종 필요한 경우가 있다. 파이썬에서는 raise라는 명령어를 사용해서 오류를 강제로 발생시킬 수 있다. 예를 들어 프로그램을 만들다가 아직 구현하지 못한 함수가 있는데 추후에 다시 사용해야 할 때 오류를 발생시키고자 한다.


NotImplementedError는 파이썬 내장 오류로 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 발생시키고자 할 때 사용한다.




+ Recent posts