본문으로 바로가기

예외 처리 사용하기

category Python/python 2020. 10. 20. 00:52

예외(Exception)

 : 코드를 실행하는 중 발생한 에러

 

 : 숫자를 0으로 나누면 ZeroDivisionError 예외가 발생함

 

 : 예외가 발생했을 때도 스크립트 실행을 중단하지 않고 계속 실행하게 해주는 예외 처리 방법

try:
	실행할 코드
except:
	예외가 발생하였을 때 처리하는 코드

   - 예외가 발생하였을 때

 

   - 예외가 발생하지 않았을 때

 

특정 예외만 처리하기

try:
	실행할 코드
except 예외이름:
	예외가 발생하였을 때 처리하는 코드

 

예외의 에러 메시지 받아오기

try:
	실행할 코드
except 예외 as 변수:
	예외가 발생하였을 때 처리하는 코드

 

 

 : 예외가 여러 개 발생하더라도 먼저 발생한 예외의 처리 코드만 실행됨

 : 또는 예외 중에서 높은 계층의 예외부터 처리됨. 기반클래스 → 파생클래스 순

 

 : 모든 예외의 에러 메시지를 출력하고 싶다면 except에 Exception을 지정하고 as 뒤에 변수를 넣으면 됨

except Exception as e:	# 모든 예외의 에러 메시지를 출력할 때는 Exception을 사용
	print('예외가 발생하였습니다.', e)

 

 

else와 finally 사용하기

: else는 except 바로 다음에 와야 하며 except를 생략할 수 없음

try:
	실행할 코드
except:
	예외가 발생하였을 때 처리하는 코드
else:
	예외가 발생하지 않았을 때 실행할 코드

 

 : finally는 except와 else를 생략할 수 있음

try:
	실행할 코드
except:
	예외가 발생하였을 때 처리하는 코드
else:
	예외가 발생하지 않았을 때 실행할 코드
finally:
	예외 발생 여부와 상관없이 항상 실행할 코드

 

try 안에서 만든 변수는 try 바깥에서 사용할 수 있나요?
 : try는 함수가 아니므로 스택 프레임을 만들지 않음
 : 따라서 try 안에서 변수를 만들더라도 try 바깥에서 사용할 수 있음
 : 물론 except, else, finally에서도 사용할 수 있음

 

 

예외 발생시키기

raise 예외('예외 메시지')

 : raise로 예외를 발생시키면 raise 아래에 있는 코드는 실행되지 않고 바로 except로 넘어감

 

 

raise의 처리 과정

: raise를 사용하지만 함수 안에는 try except가 없는 상태

 

 : 예외가 발생하더라도 현재 코드 블록에서 처리해줄 except가 없다면

   except가 나올 때까지 계속 상위 코드 블록으로 올라감

 : 만약 함수 바깥에도 처리해줄 except가 없다면 코드 실행은 중지되고 에러가 표시됨

 

현재 예외를 다시 발생 시키기

 : except 안에서 raise를 사용하면 현재 예외를 다시 발생시킴(re-raise)

 : raise만 사용하면 같은 예외를 상위 코드 블록으로 넘기지만

   raise에 다른 예외를 정하고 에러 메시지를 넣을 수도 있음

 

assert로 예외 발생시키기

 : 지정된 조건식이 거짓일 때 AssertionError 예외를 발생시키며 조건식이 참이면 ㄱ그냥 넘어감

 : 보통 assert는 나와서는 안되는 조건을 검사할 때 사용함

assert 조건식
assert 조건식, 에러메시지

 

 

예외 만들기

class 예외이름(Exception):
	def __init__(self):
    	super().__init__('에러 메시지')

 

 

반응형