KEK 개발로그
[Python] 예외 처리2 - pass, raise, Exception 클래스 본문
반응형
예외 처리2 - pass, raise, Exception 클래스
1. 오류 회피하기
>> 특정 오류를 그냥 통과시켜야 할 때 pass를 사용해 오류를 회피할 수 있다.
try:
f = open('없는파일', 'r')
except FileNotFoundError:
pass
# try 문 안에서 FileNotFoundError가 발생할 경우 pass
2. 오류 일부러 발생시키기
- raise 명령어를 사용해서 오류를 강제로 발생시킬 수 있다.
# raise로 오류 강제로 발생시키기
class Bird:
def fly(self):
raise NotImplementedError # fly 함수를 제대로 구현X, 자식 클래스에서 fly 함수를 구현한다는 의지
class Eagle(Bird):
pass
eagle = Eagle()
eagle.fly()
>> Bird 클래스를 상속받는 자식 클래스인 Eagle에서 반드시 fly 함수를 구현해야 한다는 의지를 보여줌(강제로 오류를 발생시킴으로 인해서!)
>> '메서드 오버라이딩' 하겠다는 의지이다.(상속받는 클래스에서 함수를 재구현 = 메서드 오버라이딩)
>> but Eagle클래스에서 fly함수를 제대로 구현하지 않았기 때문에 NotImplementedError가 발생한다.
* NotImplementedError: 파이썬의 내장 오류, 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 일으키기 위해 사용한다.
# 상속받는 클래스에서 함수 구현하기
class Bird:
def fly(self):
raise NotImplementedError
class Eagle(Bird):
def fly(self):
print("very fast")
eagle = Eagle()
eagle.fly() # very fast
3. 예외 만들기
- 특수한 경우에만 예외를 처리하기 위해서 예외를 만들어서 사용한다.
- Exception 클래스(파이썬 내장 클래스)를 상속해서 예외를 만들 수 있다.
# 별명 출력 함수
class MyError(Exception):
pass
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
say_nick('천사') # 천사
say_nick('바보') # MyError() 오류 발생
# 예외 처리 기법으로 MyError 발생을 에외 처리
class MyError(Exception): # MyError 라는 예외를 만듦
pass
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
try:
say_nick("천사") # 천사
say_nick('바보') # 허용되지 않는 명령입니다.
except MyError:
print('허용되지 않는 별명입니다.')
>> 이렇게 오류를 만들어서 예외 처리를 할 수 있다.
# 오류 메시지를 사용해서 예외 처리하기1 - 메시지 출력X
class MyError(Exception): # MyError 라는 예외를 만듦
pass
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
try:
say_nick("천사") # 천사
say_nick('바보') # 오류 메시지 출력X(빈칸)
except MyError as e:
print(e)
# 오류 메시지를 사용해서 예외 처리하기2 - 메시지 출력O >> __str__ 메서드 구현
class MyError(Exception): # MyError 라는 예외를 만듦
def __str__(self):
return "허용되지 않는 별명입니다."
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
try:
say_nick("천사") # 천사
say_nick('바보') # 허용되지 않는 별명입니다.
except MyError as e:
print(e)
* __str__ 메서드: print(e)처럼 오류 메시지를 print문으로 출력할 경우에 호출되는 메서드
반응형
'Python > 문법' 카테고리의 다른 글
[Python] 파이썬 내장 함수2 - id, input, int, isinstance, len, list, map, max, min, oct (0) | 2022.10.13 |
---|---|
[Python] 파이썬 내장 함수1 - abs, all, any, chr, dir, divmod, enuerate, eval, filter, hex (0) | 2022.10.07 |
[Python] 예외 처리1 - 오류(error), try, except (1) | 2022.10.05 |
[Python] 패키지 (0) | 2022.10.01 |
[Python] 모듈 (1) | 2022.09.30 |