본문 바로가기
Python

Python 예외처리

by 오렌지마끼야또 2022. 6. 18.
728x90
반응형

 

 

 

 

 

에러 종류

 

1. FileNotFoundError

 

2. ZeroDivisionError

 

3. IndexError

등등 여러가지가 있다.

 

 

 

 

예외처리 하기

try, except 문 사용법

 

1. try, except 만 쓰기

try:
   ...
except:
   ...

 

발생하는 모든 오류에 대해서 except 블록을 수행한다.

 

 

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

try:
   ...
except IndexError:
   ...

 

특정 오류가 발생했을 경우에만 except 블록을 수행한다.

 

 

3. 발생 오류와 오류 매시지 변수까지 포함한 except문

try:
   4 / 0
except ZeroDivisionError as e:
   print(e)

division by zero

오류가 발생했을 때 오류 메시지를 확인 할 수 있다.

 

 

 

 

try .. else 문

try 문은 else 절을 지원한다. else 절은 예외가 발생하지 않은 경우에 실행되며 반드시 except절 바로 다음에 위치해야 한다.

try:
   f.open('foo.txt', 'r')
except FileNotFoundError as e:
   print(str(e))
else:
   data = f.read()
   f.close()

foo.txt 파일이 없다면 except 절이 수행되고 있으면 else 절이 수행된다.

 

 

 

 

try .. finally

try 문에는 finally 절을 사용할 수 있다. finally 절은 try문 수행 도중 예외 발생 여부와 상관없이 항상 수행된다. 보통 사용한 리소스를 close 해야 할 경우에 많이 사용된다.

f = open('foo.txt', 'w')
try:
   # 수행문
finally:
  f.close()

 

 

 

 

오류 회피하기

특정 오류가 발생할 경우 프로그램 종료가 아닌 그냥 통과시켜야 하는 경우가 있다.

try:
   f = open('없는파일', 'r')
except FileNotFoundError:
   pass

위의 코드는 파일이 없더라고 pass를 사용하여 오류를 회피하는 방법이다.

 

 

 

 

 

오류 일부러 발생시키기

예를 들어 Bird 라는 클래슬 상속받는 자식클래스는 반드시 fly 라는 함수를 구현하도록 강제하고 싶은경우가 있다.

class Bird:
   def fly(self):
      raise NotImplementedError

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

 

만약 자식클래스가 fly 함수를 구현하지 않고 fly 함수를 호출한다면 에러가 발생한다.

# Eagle 클래스는 Bird 클래스를 상속받음.
class Eagle(Bird):
   pass

eagle = Eagle()
eagle.fly()

 

NotImplementedError 가 발생하지 않게 하려면 다음과 같이 반드시 fly 함수를 구현해야 한다.

class Eagle(Bird):
   def fly(self):
      print('very fast')

eagle = Eagle()
eagle.fly()

very fast

 

 

 

 

728x90
반응형

댓글