Python Basic _ 7-1. 파이썬 예외처리

WONY_yoon·2025년 10월 9일
post-thumbnail

Python Error 알아보기

# Chapter07-1
# 파이썬 예외처리의 이해
# 예외의 종류 및 처리 방법에 대한 기본 개념
# SyntaxError, TypeError, NameError, IndexError, ValueError, KeyError 등 다양함
# 문법적으로는 오류가 없어도, 실행 단계에서 예외 발생 가능
# 예외 처리의 4가지 원칙
# 1. 예외는 반드시 처리해야 한다.
# 2. 로그는 반드시 남긴다.
# 3. 예외는 던져질 수 있다. (다른 곳에서 처리 가능)
# 4. 예외를 무시할 수도 있지만, 좋은 습관은 아니다.

# SyntaxError : 문법 오류
# print('error)
# print('error'))
# if True
#     pass

# NameError : 존재하지 않는 변수를 참조할 때 발생
# a = 10
# b = 20
# print(c)

# ZeroDivisionError : 0으로 나눌 때 발생
# print(100 / 0)

# IndexError : 인덱스 범위를 벗어난 경우
# x = [50, 70, 90]
# print(x[1])         # 정상
# print(x[5])         # IndexError
# print(x.pop())      # 정상
# print(x.pop())      # 정상
# print(x.pop())      # 정상
# print(x.pop())      # 빈 리스트에서 pop 호출 → IndexError

# KeyError : 딕셔너리에 존재하지 않는 키를 참조할 때
# dic = {'name': 'Lee', 'Age': 18, 'City': 'Seoul'}
# print(dic['name'])        # 정상
# print(dic['Age'])         # 정상
# print(dic['City'])        # 정상
# print(dic['Hobby'])       # KeyError
# print(dic.get('Hobby'))   # get() 사용 시 None 반환 → 안전

# 예외가 발생하지 않는다고 가정하고 프로그램 작성 후,
# 런타임 시 예외가 발생하면 처리하는 방식 권장 (EAFP: Easier to Ask Forgiveness than Permission)

# AttributeError : 존재하지 않는 속성 접근 시 발생
# import time
# print(time.time())        # 정상
# print(time.time2())       # AttributeError

# ValueError : 잘못된 값을 전달할 때 발생
# x = [10, 50, 90]
# x.remove(50)              # 정상
# print(x)
# x.remove(100)             # ValueError (존재하지 않는 값 제거 시)

# FileNotFoundError : 존재하지 않는 파일을 열 때
# f = open('test.txt')

# TypeError : 자료형이 맞지 않을 때
# x = [1, 2]
# y = (1, 2)
# z = 'test'
# print(x + y)              # TypeError (list + tuple 불가)
# print(x + z)              # TypeError
# print(y + z)              # TypeError
# print(x + list(y))        # 정상 (list로 변환)

# 예외 처리 구문 구조
# try : 예외 발생 가능성이 있는 코드 작성
# except : 예외 발생 시 처리할 코드
# else : 예외가 발생하지 않았을 때 실행되는 코드
# finally : 항상 실행되는 코드 (예외 발생 여부 상관없음)

name = ['Kim', 'Lee', 'Park']

# 예제 1 : 특정 값이 리스트에 존재하는지 검사
try:
    z = 'Kim'   # 'Cho'로 변경 시 except 실행
    x = name.index(z)
    print('Found it! {} in name.'.format(z, x + 1))
except ValueError:
    print('Not found it! - Occured a ValueError!')
else:
    print('OK! else.')

print()

# 예제 2 : Exception으로 일반화한 예외 처리
try:
    z = 'Kim'
    x = name.index(z)
    print('Found it! {} in name.'.format(z, x + 1))
except Exception:
    print('Not found it! - Occured a ValueError!')
else:
    print('OK! else.')

print()

# 예제 3 : 예외 객체(e)로 에러 메시지 출력
try:
    z = 'Cho'
    x = name.index(z)
    print('Found it! {} in name.'.format(z, x + 1))
except Exception as e:
    print(e)
    print('Not found it! - Occured a ValueError!')
else:
    print('OK! else.')
finally:
    print('OK! finally.')

print()

# 예제 4 : 직접 예외 발생시키기 (raise)
try:
    a = 'Park'
    if a == 'Kim':   # 'Park'일 경우 else 블록 실행
        print('OK! Pass!')
    else:
        raise ValueError
except ValueError:
    print('Occured a ValueError!')
else:
    print('OK! else.')

0개의 댓글