-
75 - (파이썬) 예외 처리의 else finally 구문study with Q - 파이썬 2024. 8. 21. 15:44
# 예외 처리 구문
try: # 예외가 발생할 가능성이 있는 코드 pass except: # 예외가 발생했을 때 실행할 코드 pass else: # 예외가 발생하지 않았을 때 실행할 코드 pass finally: # 무조건 실행하는 코드 pass
위의 순서를 맞춰서 사용하고, 사용할 수 있는 조합이 정해져있다.
여러 개의 조합이 있긴 한디 실제로는
try+except 또는 try+except+finally 조합을 주로 사용한다.
# 예외처리의 else 구문
: else는 왜 안쓰나요? → else 구문 내부로 들어가나, try 내부로 들어가나 차이가 나지 않는다.
try+except+else 구문을 사용한 코드
try: # 예외가 발생할 가능성이 있는 코드 celsius= int(input("정수 입력> ")) except: # 예외가 발생했을 때 실행할 코드 print("정수 형태로 입력하시오.") else: # 예외가 발생하지 않았을 때 실행할 코드 print("화씨 변환하면 :", celsius * 9/5 + 32) >>> 정수 입력> 36 화씨 변환하면 : 96.8
try+except 구문을 사용한 코드
try: # 예외가 발생할 가능성이 있는 코드 celsius= int(input("정수 입력> ")) print("화씨 변환하면 :", celsius * 9/5 + 32) except: # 예외가 발생했을 때 실행할 코드 print("정수 형태로 입력하시오.") >>> 정수 입력> 36 화씨 변환하면 : 96.8
try+except으로만 사용한 코드와 차이가 없고 코드 길이도 짧다. 그리고 다른 언어에서 사용되지 않기도 하고 그렇게 특징적이면서 혁신적으로 쩌는 문법도 아니기에 굳이 else 까지 쓰지 않는다.
# 예외처리의 finally 구문
: 근데 얘는 좀 쩌는 구문이다.
: 예외에 상관없이 실행되는 코드로 함수 내부, 반복문 내부에 있을 때 그 멋짐이 잘 드러난다.
def 함수(): print("함수()에 진입했습니다.") try: print("try 구문에 진입했습니다.") return print("try 구문이 끝났습니다.") except: print("except 구문에 진입했습니다.") finally: print("finally 구문에 진입했습니다.") print("함수()가 끝났습니다.") 함수() >>> 함수()에 진입했습니다. try 구문에 진입했습니다. finally 구문에 진입했습니다.
위와 같이 try 구문에서 return을 때려도 finally까지 나오는 것을 알 수 있다.
참고로, for 반복문 구문에서도 동일하게 볼 수 있다.
다른 예시)
def fun(filename): fn = open(filename, "r") con = fn.read() fig = int(con) fn.close() return con filename = input("파일 이름> ") print(fun(filename))
라는 함수를 만들었다 할 때, 1. 존재하지 않는 파일 이름을 입력하거나 2. 숫자로 변환할 수 없거나 하면 value error가 발생할 것. 따라서 파일을 열었을 때, 파일이 존재하지 않는 경우를 예외처리 때려버릴 것
요렇게
def fun(filename): try: fn = open(filename, "r") con = fn.read() try: fig = int(con) return con except: print("숫자로 변환할 수 없는 파일입니다.") finally: fn.close() except: print("존재하지 않는 파일입니다. 다시 확인해주세요.") filename = input("파일 이름> ") print(fun(filename))
참고로)
finally는 예외가 발생하던 아니던 무조건 실행하는 코드이지 예외 자체를 막는 코드는 아니기 때문에, except, finally 구문 내부에서 예외가 발생하면 프로그램이 죽는다.
'study with Q - 파이썬' 카테고리의 다른 글
77 - (파이썬) 예외 강제 발생 (0) 2024.08.21 76 - (파이썬) 예외 객체와 예외 구분 (0) 2024.08.21 74 - (파이썬) 예외 처리의 try except 구문 (0) 2024.08.12 73 - (파이썬) 기본적인 예외처리 방법 (0) 2024.08.09 72 - (파이썬) 구문오류와 예외 (0) 2024.08.08