38.2 else와 finally 사용하기
이번에는 예외가 발생하지 않았을 때 코드를 실행하는 else를 사용해보겠습니다. 다음과 같이 else는 except 바로 다음에 와야 하며 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으로 나눌 수 없습니다.
38.2.1 예외와는 상관없이 항상 코드 실행하기
이번에는 예외 발생 여부와 상관없이 항상 코드를 실행하는 finally를 사용해보겠습니다. 특히 finally는 except와 else를 생략할 수 있습니다.
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, except, else, finally의 실행 과정을 그림으로 나타내면 다음과 같은 모양이 됩니다.
![](https://dojang.io/pluginfile.php/13946/mod_page/content/3/038003.png)
try는 함수가 아니므로 스택 프레임을 만들지 않습니다 따라서 try 안에서 변수를 만들더라도 try 바깥에서 사용할 수 있습니다. 물론 except, else, finally에서도 사용할 수 있습니다.