[Home] Python으로 돌아가기

Python 에러 및 예외 처리

목차

1. 주요 에러 종류 및 예제
2. 예외 처리 (try-except)
3. 사용자 정의 예외

1. 주요 에러 종류 및 예제

1.1 AttributeError (속성 오류)

존재하지 않는 속성에 접근할 때 발생한다.

class Sample:
    pass

obj = Sample()
print(obj.value)  # AttributeError: 'Sample' object has no attribute 'value'

1.2 ImportError (모듈 가져오기 오류)

모듈을 불러올 때 발생한다.

import nonexistent_module  # ImportError: No module named 'nonexistent_module'

1.3 IndexError (인덱스 오류)

리스트 또는 튜플에서 잘못된 인덱스에 접근할 때 발생한다.

my_list = [1, 2, 3]
print(my_list[5])  # IndexError: list index out of range

1.4 KeyError (키 오류)

존재하지 않는 딕셔너리 키를 사용할 때 발생한다.

my_dict = {"name": "Kim"}
print(my_dict["age"])  # KeyError: 'age'

1.5 NameError (이름 오류)

정의되지 않은 변수를 사용할 때 발생한다.

print(x)  # NameError: name 'x' is not defined

1.6 SyntaxError (문법 오류)

잘못된 문법을 사용할 때 발생한다.

# SyntaxError 예제 (잘못된 문법)
# 실행 시 오류 발생
print("Hello"  # 닫는 괄호 누락

1.7 TypeError (타입 오류)

잘못된 타입 연산을 수행할 때 발생한다.

result = "Hello" + 5  # TypeError: can only concatenate str (not "int") to str

1.8 ValueError (값 오류)

부적절한 값을 사용할 때 발생한다.

int("Hello")  # ValueError: invalid literal for int() with base 10

1.9 ZeroDivisionError (0 나누기 오류)

0으로 나누기를 수행할 때 발생한다.

x = 1 / 0  # ZeroDivisionError: division by zero

2. 예외 처리 (try-except)

Python에서는 try-except 블록을 사용하여 예외를 처리할 수 있다.

try:
    x = 1 / 0  # ZeroDivisionError 발생
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
finally:
    print("이 코드는 항상 실행된다.")

3. 사용자 정의 예외

사용자가 직접 예외를 정의할 수 있다.

class CustomError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)

try:
    raise CustomError("이것은 사용자 정의 예외입니다.")
except CustomError as e:
    print(f"오류 발생: {e}")