[Python] try / except 예외처리

  Python은 C와는 달리 예외처리를 위한 기본기능이 제공된다. 이를 이용하면 에러가 발생하는 상황에도 코드가 멈추지 않고 예외처리로 지정된 동작을 수행하고 다음 단계로 넘어 갈 수 있다. 기본적인 형태는 아래와 같다.

try :
	# 기본 동작 코드
except :
	# try 밑의 코드에 에러가 발생하였을때 실행할 코드


하지만 위와 같이 사용하는 것은 권장되지 않는데 그건 모든 에러코드를 예외처리 하기 때문에 반드시 봐야 할 에러를 넘어 갈 수 있기 때문이다. 그렇기 때문에 오히려 예외 객체를 이용해서 에러메세지를 출력해주는 것이 좋다. 샘플 코드는 아래와 같다.

try :
	# Error Code
except Exception as e:
	print(f"Error code: {e}")

이 코드 또한 모든 에러에 대해서 예외처리가 진행되지만 첫번째와 다른점은 as를 이용해서 예외객체 "e"를 할당 할 수 있다는 점이다. 이를 출력하면 error의 종류와 어디서 에러가 발생했는지 유추 할 수 있다.


잠깐 위 print문에서 ""앞에 붙어있는 f를 설명해보면, 이는 python 3.6 이후에서부터 지원하기 시작한 기능이며, f-string이라고 불리운다. 이를 이용하면 {}안에 변수를 직접 입력해 출력이 가능해진다.  즉, f-string을 사용하기 위해서는 f""와 같은 형태로 기술되어야 하며, 출력에 대한 대표적인 2개 케이스와 함께 비교구문을 보여주면 아래와 같다.

txt = "Code"
print("Test {}".format(txt))
print("Test %s"%(txt))
print(f"Test {txt}")

위 3개의 print는 모두 같은 결과를 출력한다. 하지만 가독성과 함께 편리함에 있어서는 f-string이 간결해짐을 알 수 있다. 또한 %포멧팅이나 str.format() 메서드보다 동작속도가 더 빠르다고 한다.

참고로, {}안에서는 연산도 가능하다. (예를들어 a + b 와 같은 형태로 말이다)


다시 본문으로 돌아오면 Errorcode를 적어주면 다양한 에러를 처리 할 수 있으며, 발생할 수 있는 에러에 대해서 의도적으로 처리하는 것이 가능하다. 아래의 예시 파일을 봐보자.

x = "3"
y = "0"
try :
    print(f"{int(x) // int(y)}")
except ZeroDivisionError as e :
    print(f"Error Code: {e}")
except ValueError as e :
    print(f"Error Code: {e}")

위 코드의 경우는 산술적으로 에러가 나오는 0으로 나누기를 하는 경우에 대한 에러코드, 그리고 str -> int로 변환할때 발생하는 에러에 대해서 예외처리를 진행한 것이다. 이와 같이 except 구문은 1개만 존재 할 수 있는게 아니라 여러개가 존재 할 수 있다. 또한 에러객체 "e"를 받아서 출력함으로써 문제가 발생한 부분을 정확히 알 수 있으며 디버깅에 유용한 기능을 제공한다.

하지만 위와 같이 각각의 errorcode를 받는 경우도 있지만, 이걸 묶어서 하나의 except에서 여러개의 errorcode를 받는 방법도 존재한다.

x = "3"
y = "0"
try :
    print(f"{int(x) // int(y)}")
except (ZeroDivisionError, ValueError) as e :
    print(f"Error Code: {e}")

try / except의 구문은 위처럼 여러개의 except가 들어갈 수 있지만 else와 finally 또한 들어 갈 수 있다.

x = "3"
y = "0"
try :
    print(f"{int(x) // int(y)}")
except ZeroDivisionError as e :
    print(f"Error Code: {e}")
except ValueError as e :
    print(f"Error Code: {e}")
else :
	# 예외가 발생하지 않았을 때 실행되는 코드
finally :
	# 예외 발생여부와 상관없이 무조건 실행되는 부분


위와 같이 try except else finally를 이용하면 다양한 에러들에 대해서 처리가 가능한 코드를 만들 수 있다.

댓글

이 블로그의 인기 게시물

macOS에 gemini-CLI 설치방법(with iTerm)

Master Claude Code - Complete Guide

Gemini 3.5 루머 총정리