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
'IT 공부 > python' 카테고리의 다른 글
[ python ] 프로젝트 starcraft 개인공부 (0) | 2020.12.09 |
---|---|
[ python ] 사주사용되는 함수/라이브러리 정리 (0) | 2020.12.07 |
[ python ] format() 사용법 (0) | 2020.11.20 |
[ python ] random 모듈 사용해서 난수 만들기 (0) | 2020.11.20 |
[ python ] zfill() 문자열 앞에 0 자리수를 채워주고 싶을 때 (0) | 2020.11.20 |