본문 바로가기
Python

[예외처리] Exception Handling - try, except, else, finally, raise

2023. 1. 7.

예외처리란 코드의 에러를 처리하는 문법, 방법을 말한다.
"세상에 완벽한 프로그램은 없다"라는 말이 있다.
누구든 파이썬으로 코드를 작성하고 프로그램을 실행하다 보면 에러를 만나게 되어 있는데 그런 예외 상황을 대처하기 위해 예외처리를 하는 것이다.

예외처리의 기본 구문은 아래와 같다.

try:
	예외가 발생할 수 있는 코드
except:
	예외가 발생했을 경우 실행되는 코드


예외처리를 하지 않은 예시를 보자.

print(1/0)
print('python')

# 실행 결과
ZeroDivisionError: division by zero

첫번째 줄에서 에러가 발생하고 두번째 줄은 실행되지 않는다.
프로그램은 에러를 출력하며 즉시 종료되는 것이다.

예외처리를 통해 에러가 발생하더라도 프로그램이 종료되지 않도록 코드를 수정해보면

try:
    print(1/0)
except Exception as e:  
    print('에러가 발생했습니다. 에러 내용 :', e)   # 에러 내용 출력
print('python')  # 프로그램 종료되지 않고 진행

# 실행 결과
에러가 발생했습니다. 에러 내용 : division by zero
python

try 구문에서 에러가 발생함에 따라 except 구문이 실행된다.
따라서 에러 내용을 출력하게 되고 아래에 있는 print('python')까지 실행하고 종료가 된다.

위의 코드는 에러 종류에 상관 없이 같은 처리를 하도록 구현한 것이고
에러 종류에 따라 다른 처리도 가능하다.
그리고 예외가 발생하지 않을 경우, 발생 여부와 상관 없이 실행되는 코드도 확인해보자.

try, except, else, finally 형태

try:
	예외가 발생할 수 있는 코드
except:
	예외가 발생했을 경우 실행되는 코드
else:
	예외가 발생하지 않았을 경우 실행되는 코드
finally:
	예외 발생 여부와 상관 없이 실행되는 코드


예시 : 10000원을 나누어 가질 사람 수를 입력하여 계산해보는 코드

try :
    total_money = 10000
    num = int(input('몇 명이 나누시겠습니까? :'))
    money = int(total_money / num)
except ZeroDivisionError:
    print('0으로 나눌 수는 없습니다.')
except ValueError:
    print('숫자를 정확히 입력하세요.')
else:
    print(f'한 사람당 {money}원 입니다.')
finally:
    print('프로그램을 종료합니다.')


실행 1 : 0을 입력한 경우에는 ZeroDivisionError가 발생하여 "0으로 나눌 수는 없습니다."문장이 출력되고 "프로그램을 종료합니다."를 출력한다.

실행 2 : "다섯명"을 입력한 경우에는 ValueError가 발생하여 "숫자를 정확히 입력하세요."문장이 출력되고 "프로그램을 종료합니다."를 출력한다.

실행 3 : 5를 입력한 경우에는 에러가 발생하지 않고 "한 사람당 2000원 입니다."문장이 출력되고 "프로그램을 종료합니다."를 출력한다

finally절의 활용 예시로는 할당된 자원을 반환하거나 무언가를 기록해야 하는 경우 유용하다.

try, except, else, finally 구조를 그림으로 표현한다면 아래와 같다. 그림으로 정확히 이해해보자.

 

다음은 예외를 의도적으로 발생시키는 경우를 알아보자.
이번엔 강제로 프로그램을 종료해야하는 경우다.
raise 키워드를 사용한다

# 에러 만들기
class LowNumber(Exception):
    def __str__(self):
        return 'insert number grater than 10!'

# 함수의 파라미터에 10 이하의 데이터가 넘어오면 에러(LowNumber) 발생
def input_number(number):
    if number <= 10:
        raise LowNumber()
    print(number)

input_number(5) # 10 이하 데이터 입력

# 실행 결과 - number 출력은 되지 않고 에러 발생과 함께 프로그램이 종료된다
LowNumber: insert number grater than 10!

 

사용자 정의 에러 LowNumber를 만들고
10 이하의 데이터를 받으면 LowNumber를 발생시키는 함수 input_number를 만들었다.

5를 인자로 input_number함수를 호출하자 LowNumber가 발생했으며 프로그램이 종료되어 print(number)는 실행되지 않은 것을 확인할 수 있다.

여기까지 예외처리 try, except, else, finally, raise에 대해 알아보았다.

반응형

댓글