Python 예외 처리 try except 기본 사용법

작성한 소스를 컴파일 할 때 에러가 발생하는 경우는 컴파일 에러라고 합니다.

하지만 컴파일은 문제없이 종료되었지만 프로그램 실행 중 에러가 발생하는 경우도 있습니다.

이러한 경우를 예외라고 합니다.

a = 10 / 0
print("{0}".format(a))

 

컴파일 할 때는 문제가 없지만 실행할 때 에러가 발생합니다.

ZeroDivisionError: integer division or modulo by zero

 

이러한 에러를 미리 예상하고 잡아주지 않으면 프로그램 실행 중에 갑자기 종료되버립니다.

따라서 예외 처리를 작성해 주면 프로그램이 갑자기 종료되는 것을 방지할 수 있습니다.

파이썬에서는 try except로 예외 처리할 수 있습니다.

try:
	a = 10 / 0
	print("{0}".format(a))
except ZeroDivisionError:
	print("ZeroDivisionError!!")

 

결과

ZeroDivisionError!!

 

tryexcept 사이에 처리를 작성해 줍니다.

만약 에러가 발생하는 경우 except에서 잡아줍니다.

위 예제에서는 ZeroDivisionError를 사용해 나누기를 할 때 나눌 값이 0인 경우에는 except로 빠져나와 작성한 문자열을 출력하도록 하고 있습니다.

예외 처리를 작성할 때 주의점으로는 처리에 맞는 적절한 예외 종류를 사용해야 합니다.

예를 들어 나눗셈 처리에서 ValueError로 예외 처리를 작성해서 실행해보겠습니다.

try:
	a = 10 / 0
	print("{0}".format(a))
except ValueError:
	print("ZeroDivisionError!!")

 

ValueError는 선언한 변수에 맞지 않는 값 형태를 저장하려고 할 때 사용하는 예외 처리 종류입니다.

그렇기 때문에 실행할 때 에러가 발생해도 except에서는 잡아내지 못합니다.

처리에 맞는 예외 처리를 지정하도록 해야 합니다.

샘플에서는 에러가 발생한 경우 직접 입력한 문자열을 출력하도록 했지만 파이썬에서 취득한 에러 정보를 표시할 수도 있습니다.

try:
	a = 10 / 0
	print("{0}".format(a))
except ZeroDivisionError as e:
	print("type:{0}".format(type(e)))
	print("args:{0}".format(e.args))
	print("message:{0}".format(e.message))
	print("{0}".format(e))

 

결과

type:<type 'exceptions.ZeroDivisionError'>
args:('integer division or modulo by zero',)
message:integer division or modulo by zero
integer division or modulo by zero

 

발생한 에러 내용을 그래도 출력하고 싶은 경우에 사용할 수 있습니다.

except에 작성한 예외 종류에 as를 작성하고 변수명을 지정합니다.

에러가 발생한 경우 에러 정보는 변수에 저장이 됩니다.

그리고 저장된 변수에서 필요한 정보만을 출력할 수 있습니다.

댓글