지난 시간에 계속해서 파이썬에서 예외 처리 하는 방법들에 대해 알아보았습니다.
이번 포스팅에서는 예외 처리의 이어지는 내용으로 오류 회피와 오류 발생시키기에 대해 공부해 보도록 하겠습니다.
- 57. 파이썬 – 예외 처리 #3 try .. finally 와 try … else
- 56. 파이썬 – 예외 처리 #2 예외 처리 상황과 대처 방법
- 55. 파이썬 – 패키지. relative 패키지와 예외 처리
파이썬 예외 처리 #4
파이썬 오류 회피
프로그램 코딩을 하다 보면 어떤 특정 오류가 발생할 경우에는 그 오류는 그냥 통과 시켜야 할 경우도 발생을 하게 됩니다.
>>> try:
... f = open("없는 파일 선택 함", 'r')
... except FileNotFoundError:
... pass
...
>>>
위 코드처럼 try 문장에서 FileNotFoundError 오류가 발생을 할 경우에 Pass 문장을 통해서 오류를 그냥 통과해서 오류 회피를 할 수가 있습니다.
파이썬 오류 발생시키기
오류 발생시키기는 일부러 오류를 발생 시키는 경우를 말합니다.
왜 오류를 일부러 발생 시킬까요?
오류 회피와 마찬가지로 프로그래밍을 하다 보면 간간이 나오는 경우입니다.
파이썬에서는 raise 명령을 사용해서 오류를 강제로 발생 시킬 수가 있습니다.
아래 예를 사용해 보겠지만 Bird 클래스를 상속받는 자식 클래스는 무조건 fly 라는 함수를 구현하게끔 만들고 싶은 경우가 있을 수 있습니다.
(강제로 그렇게 하고 싶은 경우)
아래 코드를 살펴 보겠습니다
아래 코드 예제는 Bird 클래스를 상속 받는 자식 클래스는 무조건 적으로 fly 함수를 구현해야 한다는 강한 의지를 보여주는 코드 예제입니다.
여기서 만약 자식 클래스가 fly 함수를 구현하지 않고 fly 함수를 호출을 하게 되면 어떻게 될까요?
class Bird:
def fly(self):
raise NotImplementedError
class Eagle(Bird):
pass
eagle = Eagle()
eagle.fly()
예외가 발생했습니다. NotImplementedError
exception: no description
File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 178, in fly
raise NotImplementedError
File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 184, in <module>
eagle.fly()
NotImplementedError:
파이썬에서 NotImplementedError 오류는 미리 정의가 되어 있는 오류입니다.
반드시 작성해야 하는 부분이 구현되지 않았을 경우를 대비해 일부러 오류를 발생시키기 위해서 사용이 됩니다.
그리고 위 코드를 살펴보게 되면 Eagle 클래스는 Bird 클래스를 상속을 받았습니다.
그에 따라서 eagle 객체의 fly 메서드를 수행하는 순간에 Bird 클래스의 fly 메서드가 수행이 되면서 NotImplementedError 오류가 발생을 하게 됩니다.
상속 받는 클래스에서 메서드를 재구현 하는 것을 오버라이딩이라고 합니다.
위 처럼 NotImplementedError 오류가 발생하지 않게 하려면 아래처럼 Eagle 클래스에 fly 함수를 구현을 해야 합니다.
class Bird:
def fly(self):
raise NotImplementedError
class Eagle(Bird):
def fly(self):
print("very very fast")
eagle = Eagle()
eagle.fly()
very very fast
위 코드처럼 구현을 하게 되면 프로그램을 실행했을 때 아무런 오류 없이 vary very fast 문장을 출력하게 됩니다.
- 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
