-
예외 처리
프로그래밍을 하다보면 여러가지 에러가 발생 합니다. 프로그램이 실행중에 발생하는 에러를 예외라고 부르는데 예외를 무시하고 코드를 실행 시키고 싶을 수 있고, 특정 예외가 발생하면 메세지를 출력한다던가 하는 모션을 취하고 싶을 수 있습니다.
예외처리는 이렇게 실행중에 발생하는 에러(예외)를 여러가지 방법으로 처리할 수 있습니다. 4가지를 간단히 정리한 아래 코드 블럭을 보시면 흐름 자체가 if문과 비슷해 보이기도 합니다.
try:
예외가 발생할 수 있는 코드
except:
예외가 발생했을때 실행할 코드
else :
예외가 발생하지 않았을 때 실행할 코드
finally:
예외 발생 여부와 상관없이 무조건 실행할 코드
아래에서는 ZeroDivisionError 발생한 경우만 예시로 되어 있으며 이 외에도 AttributeError, NameError, TypeError 등이 있습니다.
-
try, except
try는 예외가 발생할 수 있는 코드를 작성하고, except는 예외가 발생 했을 때 실행할 코드 입니다. 아래 코드를 실행하면 0으로는 나눌 수 없기 때문에 "ZeroDivisionError" 에러가 발생 합니다.
def division(a, b):
x = a / b
print(x)
# 0으로 나눌 시 예외 발생
division(4, 0)
에러가 발생했던 코드의 예외 처리를 try, except를 사용하여 처리하면 아래와 같이 코드가 완성 되는데, 0으로 나눌 경우 "0으로 나누지 마세요"가 출력되며 다른 숫자를 이용해 정상적으로 나눌 경우 재대로된 값이 나옵니다.
## 0으로 나눌 경우
def division(a, b):
x = a / b
print(x)
try:
division(4, 0)
except:
print('0으로 나누지 마세요')
결과값 : 0으로 나누지 마세요
## 2로 나눌 경우
def division(a, b):
x = a / b
print(x)
try:
division(4, 2)
except:
print('0으로 나누지 마세요')
결과값 : 2.0
0 으로 나눠서 ZeroDivisionError 가 발생할 경우 실행 코드의 흐름은 아래와 같습니다. 만약, 0이 아닌 숫자 2를 사용하면 2번 항목 없이 그대로 print(x)로 내려 가서 나눗셈 결과를 출력 합니다.
또한 except "에러명" as "변수명": 으로 입력하여 발생된 예외를 변수에 담아서 사용할 수 있습니다.
def division(a, b):
x = a / b
print(x)
try:
division(4, 0)
except ZeroDivisionError as e:
print('0으로 나누지 마세요. {0} 에러가 발생 합니다.'.format(e))
-
else, finally, raise
else는 예외가 발생하지 않았을 때 코드를 실행하고, finally는 예외 발생 여부와 상관 없이 코드를 실행 합니다. 아래 코드는 4 / 2가 되므로 예외가 발생하지 않은 예시 입니다.
def division(a, b):
x = a / b
print(x)
try:
division(4, 2)
except ZeroDivisionError as e:
print('0으로 나누지 마세요. {0} 에러가 발생 합니다.'.format(e))
else:
print('나눗셈을 정상적으로 실행 되었습니다.')
finally:
print('프로그램을 종료 합니다.')
결과값 : 2.0
결과값 : 나눗셈을 정상적으로 실행 되었습니다.
결과값 : 프로그램을 종료 합니다.
아래는 0으로 나눠서 예외가 발생하는 결과값 입니다.
def division(a, b):
x = a / b
print(x)
try:
division(4, 0)
except ZeroDivisionError as e:
print('0으로 나누지 마세요. {0} 에러가 발생 합니다.'.format(e))
else:
print('나눗셈을 정상적으로 실행 되었습니다.')
finally:
print('프로그램을 종료 합니다.')
결과값 : 0으로 나누지 마세요. division by zero 에러가 발생 합니다.
결과값 : 프로그램을 종료 합니다.
raise는 직접 예외를 발생시켜서 만들어낼 수 있습니다. x / y 의 결과가 1이 아닐 경우 Exception으로 예외를 발생시킵니다.
def division():
x, y = map(int, input('나눗셈의 결과가 1이될 두 숫자를 입력하세요: ').split())
result = x / y
if result != 1:
raise Exception('나눗셈의 결과가 1이 아닙니다.')
print(result)
try:
division()
except Exception as e:
print('예외 발생:', e)
'Programming > Python' 카테고리의 다른 글
[Python 3.7] 간단한 파이썬 네이버 영화 평점 크롤링 만들기 (네티즌 평점 상위 5개 크롤링) (6) | 2020.04.02 |
---|---|
[Python 3.7] 파이썬 이터레이터, 제너레이터 개념과 차이점 (iterator, generator, yield, yield from) (3) | 2020.02.08 |
[Python 3.7] 파이썬 다중 상속과 추상 클래스 (3) | 2020.02.07 |
[Python 3.7] 파이썬 클래스 상속 개념과 오버라이딩, super() (3) | 2020.02.07 |
[Python 3.7] 파이썬 정적 메소드 vs 클래스 메소드 (staticmethod vs classmethod) (3) | 2020.02.06 |