38.4 예외 만들기
지금까지 파이썬에 내장된 예외를 처리했는데, 이번에는 예외를 직접 만들어서 발생시켜보겠습니다. 프로그래머가 직접 만든 예외를 사용자 정의 예외라고 합니다.
![](https://dojang.io/pluginfile.php/13948/mod_page/content/2/038004.png)
예외를 만드는 방법은 간단합니다. 그냥 Exception을 상속받아서 새로운 클래스를 만들면 됩니다. 그리고 __init__ 메서드에서 기반 클래스의 __init__ 메서드를 호출하면서 에러 메시지를 넣어주면 됩니다.
class 예외이름(Exception): def __init__(self): super().__init__('에러메시지')
그럼 입력된 숫자가 3의 배수가 아닐 때 발생시킬 예외를 만들어보겠습니다.
exception_class.py
class NotThreeMultipleError(Exception): # Exception을 상속받아서 새로운 예외를 만듦 def __init__(self): super().__init__('3의 배수가 아닙니다.') def three_multiple(): try: x = int(input('3의 배수를 입력하세요: ')) if x % 3 != 0: # x가 3의 배수가 아니면 raise NotThreeMultipleError # NotThreeMultipleError 예외를 발생시킴 print(x) except Exception as e: print('예외가 발생했습니다.', e) three_multiple()
5를 입력하면 3의 배수가 아니므로 NotThreeMultipleError 예외가 발생합니다.
실행 결과
3의 배수를 입력하세요: 5 (입력) 예외가 발생했습니다. 3의 배수가 아닙니다.
먼저 Exception을 상속받아서 NotThreeMultipleError 예외를 만들었습니다. 그리고 __init__ 메서드 안에서 기반 클래스의 __init__ 메서드를 호출하면서 에러 메시지를 넣었습니다.
class NotThreeMultipleError(Exception): # Exception을 상속받아서 새로운 예외를 만듦 def __init__(self): super().__init__('3의 배수가 아닙니다.')
예외를 발생시킬 때는 raise NotThreeMultipleError와 같이 raise에 새로 만든 예외를 지정해주면 됩니다.
참고로 다음과 같이 Exception만 상속받고 pass를 넣어서 아무것도 구현하지 않아도 됩니다.
class NotThreeMultipleError(Exception): # Exception만 상속받고 pass # 아무것도 구현하지 않음
이때는 예외를 발생시킬 때 에러 메시지를 넣어주면 됩니다.
raise NotThreeMultipleError('3의 배수가 아닙니다.') # 예외를 발생시킬 때 에러 메시지를 넣음
지금까지 예외 처리에 대해 배웠습니다. 예외 처리는 에러가 발생하더라도 스크립트의 실행을 중단하지 않고 계속 실행하고자 할 때 사용한다는 점 꼭 기억해두세요.