본문 바로가기
Cording/Python_Basic

Python] 일부러 에러 발생 시키기 직접 예외 만들기 - 예외 처리 응용 코드 포함

by €€£¥ 2023. 1. 2.

Python을 통해 프로그램을 제작하는 경우에 목적을 가지고 일부러 에러를 발생시켜야 하는 경우도 있을 수 있다. 필자도 코알못이기 때문에 대체 왜 이런 상황이 필요한지에 대해서는 경험이 없지만, 필요에 대비해 공부해 둔다. 

 

1. 의도된 에러 발생 시키기

부모 클래스를 선언해준 뒤 자식 클래스가 부모 클래스의 속성을 상속을 받는 상황(오버라이딩)에서 부모 클래스에서 선언되어 있는 함수(메서드)를 자식 클래스 레벨에서 반드시 상세하게 선언해줘야 하는 조건을 걸어야 하는 상황을 가정한다. 

class Cookie:	# Cookie 종류 클래스들의 부모 클래스
    def oven(self):
        raise NotImplementedError
        
class Junk_Cookie(Cookie):    # Cookie 클래스를 상속받은 Junk_Cookie 클래스
    pass    
    
junk = Junk_Cookie()
junk.oven()    # Junk_Cookie 의 oven 함수를 호출

 

'Cookie'라는 부모 클래스의 속성을 상속 받은 'Junk_Cookie'라는 자식코드의 내용이다. 'Junk_Cookie' 클래스의 인스턴스 'junk'를 생성한 후 부모 클래스 'Cookie'의 메서드 함수 'oven'을 불러와 실행시키려고 하면 아래와 같이 NotImplemented Error 가 발생한다. 

Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_20540\4054302643.py in <module>
      1 junk = Junk_Cookie()
----> 2 junk.oven()

~\AppData\Local\Temp\ipykernel_20540\1362140636.py in oven(self)
      1 class Cookie:
      2     def oven(self):
----> 3         raise NotImplementedError

NotImplementedError:

아래와 같이 'Junk_Cookie'  클래스 내부에서 'oven' 함수를 구현해주어야 에러가 발생하지 않고 진행된다.

class Cookie:	# Cookie 종류 클래스들의 부모 클래스
    def oven(self):
        raise NotImplementedError
        
class Junk_Cookie(Cookie):    # Cookie 클래스를 상속받은 Junk_Cookie 클래스
    def oven(self):    # oven 함수를 구현 해준다.
        print('180도 12분')
    
junk = Junk_Cookie()
junk.oven()    # Junk_Cookie 의 oven 함수를 호출


180도 12분  #오류 없이 진행됨.

 

2. 의도된 예외처리 상황 만들기

프로그램이 수행되는 중에 특정 경우에만 예외처리를 진행하기 위해 파이썬의 내장 클래스인 Exception을 이용해 의도적으로 예외를 만들어 사용할 수도 있다. 예를 들어 금기어를 말하면 예외처리가 필요한 상황을 만들고자 한다면 아래의 예와 같이 사용 가능하다. 

class Bad_Word(Exception):   # 파이썬 내장 클래스 Excepttion을 상속한 'Bad_Word' 클래스 생성
    def __str__(self):
        return 'Error: 금기어 입니다.'

def say_something(word):  # 금기어를 입력하면 'Bad_Word'의 에러가 발생하는 함수
    if word == '멍청이':
        raise Bad_Word
    print(word)
    

# 예외처리 
try:
    say_something('떡볶이')
    say_something('멍청이')
    
except Bad_Word as b:
    print(b)
    
# 결과값
떡볶이
Error: 금기어 입니다.

기본적인 Python에서의 에러 및 예외 처리 방법은 아래의 포스트를 참고하면 좋겠다. 

Python] 에러 및 예외 처리 기본 / 응용 방법 - 코드 포함

 

댓글