Data_Analysis_Track_33/Python
Python_07-2(Exception 발생시키기)
lsc99
2023. 8. 24. 18:15
Call Stack Mechanism
- 발생한 Exception은 처리를 하지 않으면 caller에게 전달된다.
- 발생한 Exception에 대한 처리가 모든 caller에서 안되면 결국 파이썬 실행환경까지 전달되어 프로그램은 비정상적으로 종료 되게 된다.
Call Stack Mechanism -> 호출한 함수들이 stack 형식으로 처리된다.
호출순서 : a(), b(), c() , 실행순서 : c(), b(), a() -> Last In First Out(LIFO)
# a -> b -> c -> d -> c -> b -> a 종료 ---> call stack
def a():
b()
def b():
c()
def c():
d()
def d():
a = 10 / 0
a() # ZeroDivisionError 발생, 오류창에서 순서 확인
try:
a()
except:
print('처리')
# 재고량이 부족할 때 발생시킬 exception class
class NotEnoughStockException(Exception):
def __init__(self, stock_amount):
self.__stock_amount = stock_amount
def __str__(self): # Exception 메시지를 반환하도록
return f"재고량 보다 주문량이 더 많습니다. 현재 재고량 : {self.__stock_amount}"
@property
def stock_amount(self):
return self.__stock_amount
# setter는 정의 안함 -> 초기값을 변경 못하게 하겠다. -> immutable(불변) 타입
# 주문처리 toy 함수
def order_item(order_amount:int):
""" # docstring 작성, order_item? 으로 확인하기
주문 처리 함수
Parameter
order_amount : int - 주문 개수
Return
Exception(Raise)
NotEnoughStockException - 주문량이 재고량보다 많으면 발생.
AException : ~~
BException : ~~
"""
print('1. 재고량 조회')
stock_amount = 10 # 조회한 재고량.
print('2. 주문처리 시작')
if stock_amount < order_amount: # 주문량이 더 많으면 예외발생
raise NotEnoughStockException(stock_amount)
print('3. 주문처리')
stock_amount -= order_amount
print('4. 주문처리 종료')
print('남은 재고량', stock_amount)
order_item?
try:
order_item(5) # stock_amount가 10으로 고정되어 있으니 10보다 큰 값을 넣고 결과 확인 및 분석
except NotEnoughStockException as e:
print('exception 처리', e)
# order_item(e.stock_amount)