Notice
Recent Posts
Recent Comments
Link
반응형
Archives
Today
Total
관리 메뉴

KEK 개발로그

[Python] 예외 처리2 - pass, raise, Exception 클래스 본문

Python/문법

[Python] 예외 처리2 - pass, raise, Exception 클래스

sunnykim915 2022. 10. 5. 13:32
반응형

예외 처리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문으로 출력할 경우에 호출되는 메서드

반응형