내가 한 노력들

[ python ] 예외 처리 raise 본문

IT 공부/python

[ python ] 예외 처리 raise

JONGI-N CHOI 2020. 11. 29. 12:17

 

raise를 사용한 예외처리

test_list = [1,2,3,4,5,6,7,8]

try :
    for num in test_list :
        if num%3 == 0 :
            raise Exception("ss")
        print(num)

except Exception as e :
    print("aaa", e)

 

test_list 안에 원소를 for을 통해서 하나씩 num 변수에 바인딩 해주는데, if 조건문을 통해서 3의 배수일 때에는 

예외처리를 해주는 코딩이다.

 

num의 값이 3의 배수일 때에는 Exception에 ("에러 메세지")를 넣게된다. 

그 에러 메세지는 except Exception as e : 에서 e에 들어간다. 

 

 

결과값

1
2
aaa ss

try 안에서 for문이 작동하다가 예외를 만나게 되면 그 다음 동작은 하지 않고 멈추게 된다. 

for 문을 빠져나와 raise를 통해서 에러메세지가 except문에 전달되면서 print("aaa", e) 가 실행되면서 종료

 

 

실행되는 함수안에 try except문이 존재하지 않을 때에 raise는 어떻게 처리?

def find_three_multiple():
    for num in test_list :
        if num % 3 == 0:
            raise Exception('num :' + str(num))    # num이 3의 배수일 때 ,예외를 발생시킴
        print(num)                                    # 현재 함수 안에는 except가 없으므로
                                                      # 예외를 상위 코드 블록으로 넘김

try:
    find_three_multiple()
except Exception as e:                             # 하위 코드 블록에서 예외가 발생해도 실행됨
    print('existing three find_three_multiple ', e)

그럴 때에는 상위 코딩으로 올라가서 except를 찾아서 실행을 합니다. 

상위에도 except가 존재하지 않을 경우에는 오류가 발생

 

결과값 

1
2
existing three find_three_multiple  num :3

 

예외를 중복 발생시키기

def find_three_multiple():
    try:
        for num in test_list :
            if num % 3 == 0:
                raise Exception('num :' + str(num))    # num이 3의 배수일 경우,예외를 발생시킴
            print(num)
    except Exception as e:                             # 함수 안에서 예외를 처리함
        print('exception generation in find_three_multiple .', e)
        raise    # raise로 현재 예외를 다시 발생시켜서 상위 코드 블록으로 넘김

try:
    find_three_multiple()
except Exception as e:                                 # 하위 코드 블록에서 예외가 발생해도 실행됨
    print('exception generation in script', e)

find_three_multiple() 함수 안에서 try except 처리를 한번 해주는데,  except 문을 보면 

한번 print()로 예외 메세지를 출력해줌과 동시에 다시한번 raise를 한다. 

그러면 raise는 다시 except를 찾으러 상위로 올라가서 except 문을 실행합니다. 

 

raise만 사용했기 때문에 상위 코드 블록에도 동일한 예외 메세지가 전달됩니다. 

 

결과값

1
2
exception generation in find_three_multiple . num :3
exception generation in script num :3

 

 

<참고자료>

dojang.io/mod/page/view.php?id=2400

 

파이썬 코딩 도장: 38.3 예외 발생시키기

지금까지 숫자를 0으로 나눴을 때 에러, 리스트의 범위를 벗어난 인덱스에 접근했을 때 에러 등 파이썬에서 정해진 예외만 처리했습니다. 이번에는 우리가 직접 예외를 발생시켜 보겠습니다. 예

dojang.io