지난 시간에는 파이썬 예외 처리 중 오류 회피 하는 방법과 오류를 일부러 발생시키는 방법에 대해 알아보았습니다. 이번 포스팅에서는 예외 처리의 이어지는 내용으로 예외 만들기에 대해 공부해 보도록 하겠습니다.
- 58. 파이썬 – 예외 처리 #4 오류 회피 와 오류 발생시키기
- 57. 파이썬 – 예외 처리 #3 try .. finally 와 try … else
- 56. 파이썬 – 예외 처리 #2 예외 처리 상황과 대처 방법
파이썬 예외 처리 #5
파이썬 예외 만들기
프로그램을 수행 하는 도중에 특수한 경우에만 예외 처리를 하기 위해서는 가끔 예외를 만들어서 사용을 하게 됩니다.
그런 예외를 직접 만들어 보겠습니다.
예외는 아래 코드와 같이 파이썬에 내장 클래스인 Exception 클래스를 상속하여 만들 수 있습니다.
class CodingError(Exception):
pass
아래와 같이 별명을 출력하는 함수를 만들어 보겠습니다.
def say_nick(nick):
if nick == '악마':
raise CodingError()
print(nick)
say_nick("천사")
say_nick("악마")
위 코드를 실행을 해보면 아래와 같이 “천사” 라는 단어를 한 번 출력 시킨 후 CodingError 가 발생을 하게 됩니다.
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
Traceback (most recent call last):
File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 206, in <module>
say_nick("악마")
File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 202, in say_nick
raise CodingError()
__main__.CodingError
이번에는 예외 처리 기법을 사용해서 CodingError 발생을 예외 처리를 해 보겠습니다.
def say_nick(nick):
if nick == '악마':
raise CodingError()
print(nick)
try:
say_nick("천사")
say_nick("악마")
except CodingError:
print("이 별명은 허용되지 않은 별명입니다.")
기존에 있던 코드에 try … except 구문을 사용해서 예외 처리를 해주었습니다.
위 코드를 실행해 보면 아래처럼 출력이 됩니다.
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
이 별명은 허용되지 않은 별명입니다.
만약에 여기서 나오는 오류 메시지를 사용을 하고 싶다면 아래 코드와 같이 예외 처리를 해 주면 됩니다.
try:
say_nick("천사")
say_nick("악마")
except CodingError as e:
print(e)
하지만 막상 프로그램을 실행을 해보게 되면 print(e) 로 오류 메시지가 출력이 되지를 않습니다.
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
오류 메시지를 출력했을 때 오류 메시지가 보이게 하려면 오류 클래스에 아래 처럼 __str__ 메서드를 구현을 해야 합니다.
__str__ 메서드는 print(e) 처럼 오류 메시지를 print 문으로 출력할 경우에 호출 되는 메서드입니다.
최종 코드는 아래와 같습니다.
class CodingError(Exception):
def __str__(self):
return "이 별명은 허용되지 않은 별명입니다."
def say_nick(nick):
if nick == '악마':
raise CodingError()
print(nick)
try:
say_nick("천사")
say_nick("악마")
except CodingError as e:
print(e)
이제 위 코드를 다시 실행을 해보게 되면 “이 별명은 허용되지 않은 별명입니다.” 라는 오류메시지를 출력하는걸 확인 할 수 있습니다.
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
이 별명은 허용되지 않은 별명입니다.
- 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
