目次
1. Python에서의 예외 처리 개요
Python의 예외 처리란?
프로그램 실행 중에 예상치 못한 오류가 발생할 수 있습니다. 이를 “예외”라고 부르며, 예외가 발생하면 보통 프로그램이 중단됩니다. Python에서는 이러한 예외를 처리하기 위해 예외 처리가 제공됩니다. 예외 처리를 사용하면 프로그램이 오류에 직면해도 적절히 대응하고, 동작을 지속할 수 있습니다.왜 예외 처리가 중요한가?
예외 처리는 프로그램이 오류에 직면해도 사용자에게 사용하기 쉬운 형태로 동작을 지속하기 위해 중요합니다. 또한, 오류 원인을 파악하고 디버깅을 용이하게 함으로써 신뢰성 높은 프로그램을 만들 수 있습니다.2. try-except
문이란?
기본 구문
Python의try-except
문은 오류가 발생할 가능성이 있는 코드를 try
블록 내에 작성하고, 오류가 발생한 경우의 처리를 except
블록에 기록합니다. 아래는 기본 구문입니다:try:
# 오류가 발생할 수 있는 코드
except SomeError:
# 오류를 처리하는 코드
try
블록 내의 코드가 정상적으로 실행되는 경우, except
블록은 무시되지만, 오류가 발생하면 지정된 예외에 대해 적절한 처리를 수행합니다.자주 보는 예:제로 나눗셈 오류
0으로 나눗셈을 시도하면ZeroDivisionError
가 발생합니다. 이 오류는 다음과 같이 처리할 수 있습니다:try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다")

3. 흔히 발생하는 예외와 그 처리 방법
1. ZeroDivisionError
이 예외는 0으로 나누기를 시도했을 때 발생합니다. 예를 들어, 숫자를 0으로 나누면 Python은 자동으로 ZeroDivisionError
를 발생시킵니다.try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다")
2. ValueError
ValueError
는 함수나 연산에 부적절한 값이 전달될 때 발생합니다. 아래 예에서는 숫자로 변환할 수 없는 문자열을 int()
로 변환하려고 합니다.try:
num = int("not_a_number")
except ValueError:
print("잘못된 값입니다")
3. 여러 예외를 처리하는 방법
여러 예외를 한 번에 처리하고 싶을 때,except
문으로 여러 예외를 함께 처리할 수 있습니다:try:
result = 10 / "string"
except (ZeroDivisionError, TypeError):
print("오류가 발생했습니다")
4. 예외 객체를 사용한 오류 상세 정보 가져오기
as
에 의한 예외 객체 가져오기
except
문에서는 as
키워드를 사용하여 예외 객체를 얻을 수 있습니다. 이를 통해 오류의 상세 정보를 참조하거나 로그에 기록할 수 있습니다.try:
a = 10 / 0
except ZeroDivisionError as e:
print(f"오류가 발생했습니다: {e}")
이 코드에서는 ZeroDivisionError
가 발생했을 때, 변수 e
에 오류 메시지가 저장되고, 그 상세를 표시할 수 있습니다.5. finally
블록 사용법
finally
란?
finally
블록은 예외 발생 여부와 관계없이 반드시 실행되는 코드를 작성하기 위해 사용됩니다. 파일을 여는 작업이나 데이터베이스 연결 정리 등 반드시 수행해야 하는 작업에 적합합니다.try:
file = open("test.txt", "r")
except FileNotFoundError:
print("파일을 찾을 수 없습니다")
finally:
print("파일 작업을 종료합니다")
리소스 정리
finally
는 프로그램의 마지막에 반드시 리소스를 해제해야 할 때 유용합니다. 예를 들어, 아래와 같이 파일을 확실히 닫기 위해 finally
를 사용합니다.try:
file = open("data.txt", "r")
# 파일 작업
finally:
file.close()
이와 같이, finally
블록을 사용하여 파일이 확실히 닫히도록 보장할 수 있습니다.6. raise
에 의한 예외의 수동 발생
raise
의 역할
raise
문을 사용하면 개발자가 의도적으로 예외를 발생시킬 수 있습니다. 이를 통해 입력 검증이나 조건에 따라 오류를 명시적으로 발생시킬 수 있습니다.def check_value(value):
if value < 0:
raise ValueError("음수 값은 허용되지 않습니다")
커스텀 예외의 예
특정 조건에 대해 오류를 발생시킴으로써, 잘못된 입력을 사전에 방지할 수 있습니다. 이를 통해 예상치 못한 동작을 방지할 수 있습니다.
7. Python에서 예외 처리 베스트 프랙티스
1. 과도한 예외 처리를 피하기
예외 처리를 남용하면 코드 가독성이 떨어지고 디버깅이 어려워집니다. 예외 처리는 오류가 발생할 가능성이 높은 부분에만 사용하고, 일반적인 프로그램 흐름에 포함시키지 않도록 합시다.2. 로그를 사용해 오류 기록하기
예외가 발생한 경우, 해당 오류 메시지를 로그에 기록해 두는 것이 중요합니다. 이를 통해 나중에 오류 원인을 추적할 수 있습니다. 아래는logging
모듈을 사용한 예시입니다.import logging
try:
a = 10 / 0
except ZeroDivisionError as e:
logging.error(f"오류가 발생했습니다: {e}")
3. 광범위한 except
사용을 피하기
예외 처리에서는 가능한 구체적인 오류를 잡는 것이 권장됩니다. 광범위한 except Exception
을 사용하면 문제의 세부 사항이 간과되기 쉬우므로, 특정 오류에 대해 개별적으로 대응하는 것이 좋습니다.