40.2 else와 finally 사용하기

이번에는 예외가 발생하지 않았을 때 코드를 실행하는 else를 사용해보겠습니다. 다음과 같이 elseexcept 바로 다음에 와야 하며 except를 생략할 수 없습니다.

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

다음은 10을 입력된 숫자로 나누고 예외가 발생하지 않으면 계산 결과를 출력합니다.

try_except_else.py

try:
    x = int(input('나눌 숫자를 입력하세요: '))
    y = 10 / x
except ZeroDivisionError:    # 숫자를 0으로 나눠서 에러가 발생했을 때 실행됨
    print('숫자를 0으로 나눌 수 없습니다.')
else:                        # try의 코드에서 예외가 발생하지 않았을 때 실행됨
    print(y)

소스 코드를 실행한 뒤 2를 입력하고 엔터 키를 누르세요.

나눌 숫자를 입력하세요: 2 (입력)
5.0

2를 입력했으므로 y = 10 / x에서 예외가 발생하지 않았습니다. 따라서 else의 코드가 실행되고 계산 결과가 출력됩니다.

물론 0을 입력해서 예외가 발생하면 except의 코드만 실행되고 else의 코드는 실행되지 않습니다.

나눌 숫자를 입력하세요: 0 (입력)
숫자를 0으로 나눌  없습니다.

이번에는 예외 발생 여부와 상관없이 항상 코드를 실행하는 finally를 사용해보겠습니다. finallyexceptelse를 생략할 수 있습니다.

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

다음은 try의 코드가 끝나면 항상 '코드 실행이 끝났습니다.'를 출력합니다.

try_except_else_finally.py

try:
    x = int(input('나눌 숫자를 입력하세요: '))
    y = 10 / x
except ZeroDivisionError:    # 숫자를 0으로 나눠서 에러가 발생했을 때 실행됨
    print('숫자를 0으로 나눌 수 없습니다.')
else:                        # try의 코드에서 예외가 발생하지 않았을 때 실행됨
    print(y)
finally:                     # 예외 발생 여부와 상관없이 항상 실행됨
    print('코드 실행이 끝났습니다.')

소스 코드를 실행한 뒤 2를 입력하고 엔터 키를 누르세요.

나눌 숫자를 입력하세요: 2 (입력)
5.0
코드 실행이 끝났습니다.

2를 입력하여 예외가 발생하지 않았으므로 계산 결과가 출력되고, '코드 실행이 끝났습니다.'도 출력됩니다.

다시 소스 코드를 실행한 뒤 0을 입력하고 엔터 키를 누릅니다.

나눌 숫자를 입력하세요: 0 (입력)
숫자를 0으로 나눌  없습니다.
코드 실행이 끝났습니다.

숫자를 0으로 나눠서 예외가 발생했지만 finally는 항상 실행되므로 '코드 실행이 끝났습니다.'가 출력됩니다.

참고 | try 안에서 만든 변수는 try 바깥에서 사용할 수 있나요?

try는 함수가 아니므로 스택 프레임을 만들지 않습니다 따라서 변수를 만들더라도 try 바깥에서 사용할 수 있습니다. 물론 except, else, finally에서도 사용할 수 있습니다.