본문 바로가기
Programming/Python

파이썬 코딩 따라하기(기본) - 에러/예외처리(try)

by Deongeun 2021. 1. 6.

 

프로그래밍을 하다보면 다양한 오류 및 에러들이 발생한다.

프로그램이 잘못 동작되는 것을 막기위함인데 이를 예외적으로 처리할 수 있는 방법을 알아보자

 

자주 발생하는 에러의 종류

1. FileNotFoundError

: 디렉터리상 존재하지 않는 파일을 열려고 할때 나타나는 에러

 

 

 

 

2. ValueError

: 형변환 에러, 자료 형태가 맞지않을때 나타나는 에러

위와 같이 나누기를 하는 코드가 있을때,

숫자가 아닌 한글을 입력하면

다음과 같이 ValueError가 발생한다.

 

 

 

 

3. ZeroDivisionError

위와 같은 나누기코드를 넣었을때,

0을 입력하게 되면

다음과 같이 0으로는 나눌 수 없다는 ZeroDivisionError가 발생한다.

 

 

 

 

4. IndexError : list index out of range

a라는 리스트가 다음과 같이 있을때

a[4]를 출력하게되면,

 

해당 리스트 범위에 존재하지 않는다는 에러가 발생한다.

 

 

 

 

 

try, except 문

이와 같은 에러들을 처리할 수 있는게 try, except문이다.

 

1. 기본구조

try:
	...
except:
	...

- 오류 종류에 상관없이 오류가 발생하면 except 블록을 실행한다.

 

2. 발생오류를 포함한 except문

try:
	...
except 발생오류:
	...

- except 뒤에 발생 오류를 넣으면 해당 오류가 발생했을 때 except블록을 실행한다.

 

3. 발생 오류와 오류 메시지를 포함한 except문

try:
	...
except 발생 오류 as 오류 메시지 변수:
	...

- 어떤 오류가 발생했는지 알 수있게 해준다.

 

ex)

 

 

 

 

 

try, else 문

else는 except문 다음으로 위치할 수 있고, 예외(에러)가 발생하지 않는 경우에 실행된다.

ex)

- 나누기를 하는데 만약 ZeroDivisionError가 나면 예외처리하여 오류메시지를 출력하고,

오류가 나지 않으면 else문의 "Division completed"라는 메시지를 띄운다.

 

 

 

 

 

try, finally 문

finally는 try문 실행시 에러발생 여부에 상관없이 항상 실행되는 것이다.

보통 사용된 파일을 마지막에 close해야할 경우에 많이 사용한다.

 

 

 

 

pass를 활용하여 오류무시하고 진행하기

- 존재하지 않는 파일을 열기시도 했을때(FileNotFoundError) pass를 실행하게하면 빨간 글씨로 Tracebackerror 발생 없이 진행된다.

 

 

 

 

raise, 오류 발생시키기

- if 문 -> 만약 첫번째 두번째 입력값이 두자리 숫자가 되면 일부러 ValueError를 일으키고,

  except 문에서 ValueError발생시 "한자리값을 입력하세요"라는 문구가 출력되게 한다.

 

 

 

 

 

* NotImplementedError

: 꼭 작성해야하는 부분이 구현되지 않았을 경우 일부러 오류를 발생시키고자 사용한다.

 

- Delivery라는 클래스가 있고 packing이라는 메소드를 입력하지 않으면 NotImplementedError가 발생하게 한다.

- Delivery 클래스를 상속하는 Togo 클래스를 만들었다. 

  하지만, 이때 packing이라는 메소드를 입력하지 않으면

 

위와 같은 오류가 발생한다.

 

 

따라서, packing 메소드를 입력해주면 에러를 일으키지않고 출력할 수 있다.