기본 예외 처리 문법
Python에서 예외 처리는 try, except 블록을 사용하여 구현한다. 예외 처리의 기본 구조는 다음과 같다.
try:
# 예외가 발생할 가능성이 있는 코드
result = 10 / 0 # ZeroDivisionError 발생
except:
# 예외가 발생했을 때 실행할 코드
print("오류가 발생했습니다.")
하지만 위의 방식은 모든 예외를 동일하게 처리하므로 권장하지 않는다. 대신 특정 예외 유형을 지정하여 처리하는 것이 좋다.
try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
여러 예외를 처리하는 방법은 다음과 같다.
try:
# 코드 실행
num = int(input("숫자를 입력하세요: "))
result = 100 / num
print(result)
except ValueError:
print("유효한 숫자를 입력해주세요.")
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
여러 예외를 한 번에 처리할 수도 있다.
try:
# 코드 실행
num = int(input("숫자를 입력하세요: "))
result = 100 / num
print(result)
except (ValueError, ZeroDivisionError):
print("입력이 잘못되었거나 0으로 나눌 수 없습니다.")
예외 객체에 접근하려면 as 키워드를 사용하면 된다.
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"오류 발생: {e}") # 오류 발생: division by zero
Python에서 Exception 클래스는 대부분의 내장 예외들의 기본 클래스이기 때문에, except Exception: 구문을 사용하면 거의 모든 예외 상황을 한 번에 처리할 수 있다.
try:
result = 10 / 0
except Exception as e:
print(f"오류 발생: {e}")
자주 사용되는 예외 타입
- ValueError: 함수나 연산에 적절한 타입이지만 부적절한 값이 전달될 때 발생
- TypeError: 연산이나 함수에 부적절한 타입의 객체가 전달될 때 발생
- KeyError: 딕셔너리에 존재하지 않는 키로 접근할 때 발생
- IndexError: 시퀀스의 인덱스 범위를 벗어날 때 발생
- FileNotFoundError: 존재하지 않는 파일을 열려고 할 때 발생
- ImportError: 모듈을 가져오는 데 문제가 있을 때 발생
- AttributeError: 객체에 존재하지 않는 속성이나 메서드에 접근할 때 발생
try-except-else-finally 패턴
Python의 예외 처리는 try, except, else, finally 키워드를 사용하여 더 세밀하게 제어할 수 있다.
try:
# 예외가 발생할 가능성이 있는 코드
num = int(input("숫자를 입력하세요: "))
result = 100 / num
except ValueError:
print("유효한 숫자를 입력해주세요.")
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
else:
# 예외가 발생하지 않았을 때만 실행
print(f"결과: {result}")
finally:
# 예외 발생 여부와 상관없이 항상 실행
print("프로그램을 종료합니다.")
각 블록의 역할:
- try: 예외가 발생할 가능성이 있는 코드 블록
- except: 특정 예외가 발생했을 때 실행되는 코드 블록
- else: try 블록에서 예외가 발생하지 않았을 때만 실행되는 코드 블록
- finally: 예외 발생 여부와 상관없이 항상 실행되는 코드 블록
finally 블록은 리소스 해제와 같은 정리 작업에 주로 사용한다. 파일, 네트워크 연결, 데이터베이스 연결 등의 리소스를 안전하게 닫을 때 사용할 수 있다.
try:
file = open("example.txt", "r")
content = file.read()
# 파일 처리 작업
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
finally:
# 파일이 열렸다면 항상 닫습니다.
if 'file' in locals() and not file.closed:
file.close()
print("파일이 닫혔습니다.")
예외 발생 시 조치 방법
exception이 발생할 경우, 오류 메시지 출력 후 계속 실행, 재시도, 시스템 종료 등의 조치를 취할 수 있다.
1. 오류 메시지 출력 후 계속 실행
가장 흔한 방식으로, 오류를 기록하고 프로그램이 계속 실행되도록 한다.
try:
value = int(input("숫자를 입력하세요: "))
except ValueError:
print("올바른 숫자가 아닙니다.")
value = 0 # 기본값 설정
# 프로그램이 계속 실행됨
print(f"입력값 또는 기본값: {value}")
2. 오류 로깅 후 계속 실행
심각하지 않은 오류의 경우, 로그를 남기고 프로그램을 계속 실행한다.
import logging
logging.basicConfig(level=logging.INFO)
try:
result = some_function()
except Exception as e:
logging.error(f"오류 발생: {e}")
result = None
# 프로그램이 계속 실행됨
3. 오류 메시지 출력 후 종료
치명적인 오류의 경우, 메시지를 출력하고 프로그램을 종료한다.
import sys
try:
config_file = open("config.json", "r")
except FileNotFoundError:
print("필수 설정 파일을 찾을 수 없습니다. 프로그램을 종료합니다.")
sys.exit(1) # 오류 코드와 함께 종료
'python' 카테고리의 다른 글
파이썬 기초 - 클래스 속성 관리와 접근 제어 (0) | 2025.03.20 |
---|---|
파이썬 기초 - Decorator (0) | 2025.03.20 |
파이썬 기초 - Context Manager (0) | 2025.03.19 |
파이썬 기초 - Mutable과 Immutable 객체 (0) | 2025.03.19 |
파이썬 기초 - Iterable, Iterator, Generator (0) | 2025.03.18 |
댓글