제11장: 예외 처리와 오류 관리
파이썬의 예외 처리와 오류 관리는 왜 중요한가?
프로그래밍에는 예기치 않은 상황이 늘 따라옵니다. 파일이 없거나, 0으로 나누기, 잘못된 데이터 입력 등 수많은 오류가 프로그램 실행 중에 발생할 수 있습니다. 만약 이런 오류에 제대로 대처하지 못한다면, 프로그램은 바로 멈추고 사용자는 원인조차 모른 채 혼란에 빠질 수 있습니다. 그렇기 때문에 "예외 처리"는 파이썬 기초를 넘어 꼭 숙달해야 할 핵심입니다.
예외란 무엇인가?
파이썬에서 예외(Exception)는 코드가 정상 흐름을 벗어나 실행이 중단되는 상황, 즉 오류를 일컫습니다. 대표적으로 잘못된 수식 계산, 없는 리스트 인덱스 접근, 숫자가 아닌 값을 숫자로 변환하는 경우 등이 있습니다. 이런 문제들은 그대로 두면 프로그램이 즉시 종료됩니다.
try-except로 안전한 코드 만들기
파이썬은 try-except
구조를 통해 오류 발생을 감지하고, 원하는 방식으로 처리할 수 있게 해줍니다. 아래와 같은 형식이 기본입니다.
try:
# 예외가 날 수 있는 코드 입력
except 예외타입:
# 오류 발생 시 실행할 코드
간단한 예를 살펴봅시다.
try:
n = int(input("숫자를 입력하세요: "))
print(n)
except ValueError:
print("숫자만 입력 가능합니다.")
사용자가 "사과"처럼 숫자가 아닌 값을 입력하면, 프로그램은 죽지 않고 안내 문구를 출력합니다.
여러 예외 다루기
때때로 다양한 종류의 예외가 한 코드에서 발생할 수 있습니다. 여러 예외를 구분하려면 except
문을 나란히 두거나, 한 줄에 여러 예외를 묶을 수 있습니다.
try:
num = 10 / int(input("0이 아닌 숫자를 입력하세요: "))
except ZeroDivisionError:
print("0으로는 나눌 수 없습니다.")
except ValueError:
print("정수를 입력하세요.")
except Exception:
print("알 수 없는 오류가 발생했습니다.")
else와 finally의 역할
else
절은 예외가 발생하지 않을 때만 실행됩니다. finally
는 예외 발생 여부와 상관없이 항상 실행되어, 파일 닫기 등 마무리 작업에 적합합니다.
try:
f = open("test.txt", "r")
except FileNotFoundError:
print("파일이 존재하지 않습니다.")
else:
print("파일을 정상적으로 열었습니다.")
f.close()
finally:
print("프로그램 종료.")
직접 예외 발생시키기
특별한 조건에서 손수 오류를 일으켜야 할 때는 raise
구문을 사용합니다. 예를 들어, 점수 입력이 음수면 오류를 내도록 설정할 수 있습니다.
def enter_score(score):
if score < 0:
raise ValueError("점수는 음수가 될 수 없습니다.")
예외 처리, 왜 연습해야 할까?
아무리 간단한 프로그램이라도 예상치 못한 환경에서 오류가 날 수 있습니다. 안정적이고 신뢰받는 코드를 만들려면 예외상황을 미리 생각하고, 상황에 맞게 밝고 친절하게 처리해 주는 습관이 필요합니다. 작은 실수 한 번이 전체 시스템을 멈추게 할 수 있기 때문입니다.
예외 처리는 초보자에게 어렵게 느껴질 수 있지만, 다양한 실습 사례를 통해 익숙해지면 프로그램의 견고함과 신뢰성을 크게 높일 수 있습니다. 실전에서는 꼭 필요한 기술입니다.


