상세 컨텐츠

본문 제목

파이썬 배우기: 예외 처리(try-except) 하는 방법

IT - 프로그래밍/파이썬

by 파란 호랑 2025. 2. 19. 08:00

본문

반응형

프로그래밍을 하다 보면 예상치 못한 오류(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

반응형

관련글 더보기