상세 컨텐츠

본문 제목

예외 처리

인공지능_2026/1. 파이썬

by Ryuzy 2026. 4. 30. 10:16

본문

반응형

1. 예외

예외(Exception)는 프로그램 실행  발생할  있는 예상치 못한 문제 또는 오류 상황을 의미합니다. 예외가 발생하면 프로그램은 중단되기 때문에 이를 적절하게 처리하여 중단을 방지하거나 오류에 대한 정보를 사용자에게 제공해야 합니다.

int(10 / 3)
print(5 / 0) # ZeroDivisionError: division by zero
print(4 / 2)

 

 

2. 예외 계층 구조

BaseException
 ├── Exception        ← 우리가 보통 사용하는 예외
 │    ├── ValueError
 │    ├── TypeError
 │    ├── ZeroDivisionError
 │    └── ...
 ├── KeyboardInterrupt
 └── SystemExit

👉 BaseException이 따로 있는 이유는 “진짜 에러”와 “프로그램 제어용 이벤트”를 구분하기 위해서입니다.

 

1. Exception

코드 실행 중 발생한 일반적인 오류

  • 0으로 나누기
  • 잘못된 타입
  • 값 오류

 

2. KeyboardInterrupt

사용자가 Ctrl + C 눌렀을 때 발생

👉 프로그램을 강제로 멈추는 신호

 

3. SystemExit

프로그램 종료 요청

👉 내부적으로 exit() 호출 시 발생

👉  KeyboardInterrupt와 SystemExit는 사실 "에러"가 아니라 프로그램을 멈추거나 종료하기 위한 신호

 

 

2. 예외 처리 기본 구조

try:
    # 예외가 발생할 가능성이 있는 코드
except ExceptionType1:  # 'ExceptionType1'에는 실제 예외 유형이 들어갑니다.
    # ExceptionType1 예외가 발생했을 때 실행될 코드
except ExceptionType2:  # 'ExceptionType2'에는 다른 예외 유형이 들어갑니다.
    # ExceptionType2 예외가 발생했을 때 실행될 코드
# 추가적인 except 블록을 계속 추가할 수 있습니다.
else:
    # try 블록에서 예외가 발생하지 않았을 때 실행될 코드
finally:
    # 예외 발생 여부와 관계없이 항상 실행될 코드

 

try:
    raise KeyboardInterrupt
except Exception:
    print("Exception 잡힘")
except BaseException:
    print("BaseException 잡힘")

👉 위험한 방식입니다. except: = BaseException까지 잡습니다.

 

raise

raise는 파이썬에서 의도적으로 예외를 발생시키거나(throw), 현재 발생한 예외를 다시 전달(re-raise)하기 위해 사용하는 키워드입니다. 이를 통해 잘못된 입력이나 비정상적인 상태를 명확하게 알리고, 호출한 쪽에서 적절히 처리하도록 흐름을 제어할 수 있습니다.

 

파이썬 주요 예외 타입 정리

 

try:
    print(10 / 3)
    print(5 / 0)
    print(4 / 2)
except Exception:
    print('예외 발생!')
print('프로그램을 종료합니다')

 

try:
    print(10 / 3)
    print(5 / 0)
    print(4 / 2)
except ZeroDivisionError:
    print('예외 발생!')
print('프로그램을 종료합니다')

 

try:
    data = [10, 20, 30, 40, 50]
    print(data[0])
    print(data[5])
    print(data[1])
except IndexError:
    print('인덱스 오류')
print('프로그램을 종료합니다')

 

try:
    data = [10, 20, 30, 40, 50]
    # print(data[5])
    # print(int('안녕'))
    print(5 / 0)
except IndexError:
    print('인덱스 오류')
except ValueError:
    print('입력 오류')
except ZeroDivisionError:
    print('0으로 나눌 수 없음')
except Exception:
    print('예외 발생!')
else:
    print('에러가 발생하지 않은 정상적인 프로그램')
finally:
    print('에러에 관계없이 무조건 실행되는 문장')
print('프로그램을 종료합니다')

 

 

3. 예외 객체 내부 구조

Exception 객체
├── args        → 에러 메시지
├── __str__()   → 사용자용 메시지
├── __repr__()  → 개발자용 표현
├── __class__   → 에러 타입
└── traceback   → 에러 발생 위치 정보

 

try:
    int("abc")
except Exception as e:
    print("에러 메시지:", e)
    print("에러 타입:", type(e))
    print("args:", e.args)

👉 as를 사용하는 이유는 발생한 예외 객체를 변수로 받아서, 그 안에 담긴 정보(에러 메시지, 타입 등)를 활용하기 위해서입니다.

 

try:
    raise Exception('예외가 발생했어요!!')
except Exception as e:
    print(e)

 

def func1():
    n = int(input('짝수를 입력하세요: '))
    if n % 2 == 1:
        raise Exception('홀수를 입력했어요!!')
    print(n)

# func1()

try:
    func1()
except Exception as e:
    print('예외가 발생: ', e)

 

def func1():
    func2()
    # try:
    #     func2()
    # except TypeError:
    #     print('타입이 올바르지 않습니다')

def func2():
    func3()
    # try:
    #     func3()
    # except TypeError:
    #     print('타입이 올바르지 않습니다')

def func3():
    try:
        print('%d' % '문자열')
    except TypeError:
        print('타입이 올바르지 않습니다')

func1()

# try:
#     func1()
# except TypeError:
#     print('타입이 올바르지 않습니다')

 

반응형

'인공지능_2026 > 1. 파이썬' 카테고리의 다른 글

모듈  (1) 2026.04.30
매직 메서드  (1) 2026.04.30
객체지향 프로그래밍 4대 패러다임  (0) 2026.04.28
객체지향 프로그래밍(OOP)  (0) 2026.04.27
사용자 정의 함수  (0) 2026.04.27

관련글 더보기