작성한 소스를 컴파일 할 때 에러가 발생하는 경우는 컴파일 에러라고 합니다.
하지만 컴파일은 문제없이 종료되었지만 프로그램 실행 중 에러가 발생하는 경우도 있습니다.
이러한 경우를 예외라고 합니다.
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!!
try와 except 사이에 처리를 작성해 줍니다.
만약 에러가 발생하는 경우 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를 작성하고 변수명을 지정합니다.
에러가 발생한 경우 에러 정보는 변수에 저장이 됩니다.
그리고 저장된 변수에서 필요한 정보만을 출력할 수 있습니다.
댓글