프로그래밍을 하다 보면 예상치 못한 오류(Exception)가 발생할 수 있습니다.
예외 처리는 이러한 오류를 미리 예측하고, 프로그램이 중단되지 않도록 우아하게 처리하는 방법입니다.
이번 글에서는 파이썬에서 예외 처리를 어떻게 구현하는지, 다양한 예제와 함께 알아보겠습니다.
예외(Exception)란?
• 예외: 프로그램 실행 중 발생하는 오류로, 잘못된 입력, 파일 미존재, 네트워크 오류 등 여러 상황에서 발생합니다.
• 예외가 발생하면 프로그램은 기본적으로 중단되지만, 예외 처리(Exception Handling)를 통해 오류를 처리하면 프로그램이 정상적으로 계속 실행될 수 있습니다.
🔹 예외가 발생하는 일반적인 경우
print(10 / 0) # ZeroDivisionError: division by zero
num = int("hello") # ValueError: invalid literal for int()
✅ 위 코드는 각각 0으로 나누는 오류, 잘못된 타입 변환 오류를 발생시킵니다.
기본 예외 처리 구조: try-except
파이썬에서는 try 블록 안에 오류가 발생할 가능성이 있는 코드를 작성하고,
except 블록에서 해당 오류를 처리합니다.
try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
✅ 실행 과정
1. try 블록에서 10을 0으로 나누려 하므로 ZeroDivisionError가 발생합니다.
2. except 블록이 실행되어 "0으로 나눌 수 없습니다."가 출력됩니다.
여러 예외 처리하기
여러 종류의 예외를 개별적으로 처리할 수 있습니다.
try:
number = int(input("숫자를 입력하세요: "))
result = 100 / number
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except ValueError:
print("올바른 숫자를 입력하세요.")
✅ 예제 설명
• 사용자가 숫자가 아닌 값을 입력하면 ValueError가 발생하고,
• 0을 입력하면 ZeroDivisionError가 발생하여 각각 다른 메시지가 출력됩니다.
모든 예외 처리하기
예외의 종류를 특정하지 않고 모든 예외를 처리할 수도 있습니다.
try:
result = 10 / int(input("숫자를 입력하세요: "))
except Exception as e:
print(f"오류 발생: {e}")
✅ except Exception as e를 사용하면 모든 종류의 예외를 잡을 수 있음
✅ e 변수에 오류 메시지가 저장되어 출력 가능
⚠️ 하지만, 모든 예외를 한꺼번에 처리하면 오류의 원인을 찾기 어려울 수 있으므로 주의해야 합니다.
else와 finally 사용하기
• else: 예외가 발생하지 않았을 때 실행되는 블록
• finally: 예외 발생 여부와 상관없이 항상 실행되는 블록
try:
number = int(input("숫자를 입력하세요: "))
result = 100 / number
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except ValueError:
print("올바른 숫자를 입력하세요.")
else:
print(f"계산 결과: {result}")
finally:
print("프로그램을 종료합니다.")
✅ 실행 과정
• 입력에 따라 해당 예외가 처리되고,
• 예외가 없으면 else 블록이 실행되며,
• 마지막으로 finally 블록이 항상 실행됩니다.
예외 발생시키기 (raise)
필요에 따라 직접 예외를 발생시킬 수 있습니다.
def check_positive(number):
if number < 0:
raise ValueError("음수는 허용되지 않습니다.")
return number
try:
value = check_positive(-5)
except ValueError as e:
print(e)
✅ 예제 설명
• check_positive 함수는 음수를 입력하면 ValueError를 발생시키며,
• 호출한 쪽에서 해당 예외를 처리합니다.
사용자 정의 예외 만들기
내장 예외 외에, 사용자만의 예외 클래스를 만들어 사용할 수도 있습니다.
class NegativeNumberError(Exception):
"""음수 입력 시 발생하는 사용자 정의 예외"""
pass
def check_positive(number):
if number < 0:
raise NegativeNumberError("음수는 허용되지 않습니다.")
try:
check_positive(-10)
except NegativeNumberError as e:
print(e)
✅ Exception 클래스를 상속받아 새로운 예외 클래스를 생성
✅ 특정 조건에서 raise를 사용해 직접 예외 발생
파일 입출력에서 예외 처리하기
파일을 다룰 때, 존재하지 않는 파일을 열려고 하면 오류가 발생할 수 있습니다.
이를 예외 처리로 방지할 수 있습니다.
try:
with open("data.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
✅ 예제 설명
• 파일이 존재하지 않으면 FileNotFoundError가 발생하며,
• 예외 처리를 통해 프로그램이 중단되지 않도록 함.
마무리 및 요약
✅ try-except를 사용하면 예외 발생 시 프로그램이 강제 종료되지 않도록 처리 가능
✅ 여러 예외를 개별적으로 처리하거나, except Exception as e로 모든 예외를 처리할 수 있음
✅ else는 예외가 발생하지 않았을 때 실행, finally는 무조건 실행
✅ raise를 사용하면 직접 예외를 발생시킬 수 있음
✅ class를 활용하여 사용자 정의 예외를 만들 수 있음
✅ 파일 처리 등 실생활에서 유용한 예외 처리 기법을 익혀야 함
예외 처리는 프로그램의 안정성을 높이고, 버그를 줄이는 필수적인 기술입니다!
실제 프로젝트에서도 적극 활용해 보세요.
#파이썬 #Python #예외처리 #프로그래밍 #코딩기초 #에러처리 #개발자 #코딩공부 #IT학습 #PythonTips #Python3
파이썬 배우기: 익명 함수(lambda 함수) (0) | 2025.02.26 |
---|---|
파이썬 배우기: 위치 인수와 키워드 인수 활용하기 (0) | 2025.02.20 |
파이썬 배우기: 파일 입출력 알아보기 (0) | 2025.02.18 |
파이썬 배우기: 딕셔너리(Dictionary)와 세트(Set) 활용하기 (0) | 2025.02.17 |
파이썬 배우기: 리스트와 튜플 알아보기 (0) | 2025.02.13 |