#try except 구문으로 예외 처리하기
try:
    number_input_a = int((input("정수 입력 :")))
    print("원의 반지름 :", number_input_a)
    print("원의 둘레 :", 2*3.14*number_input_a)
    print("원의 넓이 :", 3.14*number_input_a*number_input_a)
except:
    print("정수를 입력하지 않았습니다.")
else:
    print("예외가 발생하지 않았습니다.")
finally:
    print("일단 프로그램이 어떻게든 끝났습니다.")

1. 내가 입력한 값 : 3일때 

정상 try 구문 진행되며 예외 except 건너뛰고 종료된다.

 

2. 내가 입력한 값 : zz일때 

예외값 except로 넘어가 프로그램 종료된다.

 

두가지 경우 모두 finally 구문이 실행되는 모습을 볼 수 있다.

finally 구문은 예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문이다. 예외가 발생하든 발생하지 않든 무조건 실행할 때 사용하는 코드이다.  정리하면

 

  • try : 예외가 발생할 가능성이 있는 코드
  • except : 예외가 발생했을 때 실행할 코드
  • else : 예외가 발생하지 않았을 때 실행할 코드
  • finally : 무조건 실행할 코드

조합해보면 아래와 같다. 이 외에 조합은 실행 시 구문 오류 발생한다.

  • try + except
  • try + except + else
  • try + except + finally
  • try + except + else + finally
  • try + finally
#try except 구문으로 파일 열고 닫기
try:
    file = open('hi.txt', 'w')
    file.write('안녕!')
except:
    print('오류 발생')

file.close()
print('#파일이 제대로 닫혔는지 확인하세요')
print('file.closed:', file.closed)

마지막에 finally 안쓰고도 try +except 구문만 해도 아무 문제 없다. 

finally 구문은 반복문 또는 함수 내부에 있을 때 위력을 발휘한다. 🌟

def test():
    print('test() 함수의 첫 줄')
    try:
        print('try 구문 시작')
        return
        print('try 구문의 return 키워드 뒤')
    except:
        print('except 구문 실행됨')
    finally:
        print('finally 구문 실행됨')
    print('test() 함수의 마지막 줄')

test()

👩🏻‍💻  try 구문 내부에 return 키워드 있는게 포인트. try 구문 중간에서 탈출해도 finally 구문은 무조건 실행된다. 따라서 함수 내부에서 파일 처리 코드를 깔끔하게 만들고 싶을 때 finally 구문을 활용하는 경우가 많다. try구문에서 원할 때 return키워드로 빠져나가도 파일이 무조건 닫히기 때문 ! 

def write_text_file(filename, text):
    try:
        file = open(filename, 'w')
        file.write(text)
    except:
        print('오류가 발생했습니다.')
    finally:
        file.close()

write_text_file('TEST.txt','확인하세요')

finally 구문에서 close()함수를 호출하도록 코드 작성하면 깔끔해짐.

print('프로그램 시작됨')
while True:
    try:
        print('try구문 시작됨')
        break
        print('try구문의 break 키워드 뒤')
    except:
        print('except구문이 실행됨')
    finally:
        print('finally 구문이 실행됨')
    print('while반복문의 마지막 줄')
    
print('프로그램 종료')

break 키워드로 try 구문 전체를 빠져나가도 ! finally 구문이 실행되는 것을 볼 수 있다 🌟

break안넣으면 while문 못 빠져나가니 참고 ㅎㅎ

+ Recent posts