본문 바로가기

Python/공부

기본편 : 예외처리

728x90
반응형
## 예외처리 
# try:
#     print("나누기 전용 계산기입니다.")
#     nums = []
#     nums.append(int(input("첫 번째 숫자를 입력하세요 :")))
#     nums.append(int(input("두 번째 숫자를 입력하세요 :")))
#     # nums.append(int(nums[0]/nums[1]))
#     print("{0} / {1} = {2}".format(nums[0], nums[1], nums[2]))
# except ValueError:
#     print("에러! 잘못된 값을 입력하였습니다.")    
# except ZeroDivisionError as err:
#     print(err)    
# except Exception as err:
#     print("알 수 없는 에러가 발생했습니다.")    
#     print(err)


## 의도적으로 예외 발생시키기 
# try: 
#     print("한 자리 숫자 나누기 전용 계산기입니다.")
#     num1 = int(input("첫 번째 숫자를 입력하세요 :"))    
#     num2 = int(input("첫 번째 숫자를 입력하세요 :"))
#     if num1 >= 10 or num2 >= 10:
#         raise ValueError
#     print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
# except ValueError:        
#     print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")



## 사용자 정의 예외처리 
# class BigNumberError(Exception):
#     def __init__(self, msg):
#         self.msg = msg
#     def __str__(self):
#         return self.msg   

# try: 
#     print("한 자리 숫자 나누기 전용 계산기입니다.")
#     num1 = int(input("첫 번째 숫자를 입력하세요 :"))    
#     num2 = int(input("두 번째 숫자를 입력하세요 :"))
#     if num1 >= 10 or num2 >= 10:
#         raise BigNumberError("입력값 : {0}, {1}".format(num1, num2))
#     print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
# except ValueError:        
#     print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
# except BigNumberError as err:
#     print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요.")    
#     print(err)   
# finally:
#     print("계산기를 이용해 주셔서 감사합니다.")


## finally 
# - 예외처리구문에서 정상적으로 수행되건 오류가 발생되건 상관없이 무족건 실행되는 구문이다.



# Quiz) 동네에 항상 대기 손님이 있는 맛있는 치킨집이 있습니다.
#       대기 손님의 치킨 요리 시간을 줄이고자 자동 주문 시스템을 제작하였습니다.
#       시스템 코드를 확인하고 적절한 예외처리 구문을 넣으시오.

# 조건1 : 1보다 작거나 숫자가 아닌 입력값이 들어올 때는 ValueError로 처리
#         출력 메시지 : "잘못된 값을 입력하였습니다."      
# 조건2 : 대기 손님이 주문할 수 있는 총 치킨량은 10마리로 한정
#         출력 메시지 : "재고가 소진되어 더 이상 주문을 받지 않습니다."        

# [코드]   
# class SoldOutError(Exception):
#     def __init__(self, msg):
#         self.msg = msg
#     def __str__(self):
#         return self.msg    
# try:     
#     chicken = 10
#     waiting = 1 # 홀 안에는 현재 만석. 대기번호 1부터 시작
#     while(True):
#         print("[남은 치킨: {0}]".format(chicken))
#         order = int(input("치킨 몇 마리 주문하시겠습니까?"))
#         if order > chicken: # 남은 치킨보다 주문량이 많을때
#             print("재료가 부족합니다.")
#         elif chicken <= 1 :
#             raise ValueError
#         elif chicken == 0:
#             raise SoldOutError("입력값 : {0}".format(chicken))         
#         else:
#             print("[대기번호 {0}] {1} 마리 주문이 완료되었습니다.".format(waiting, order))
#             waiting += 1 
#             chicken -= order 
# except ValueError:
#     print("잘못된 값을 입력하였습니다.")
# except SoldOutError as err:
#     print("재고가 소진되어 더 이상 주문을 받지 않습니다.")
#     print(err)

# ** 풀이과정 **
class SoldOutError(Exception):
    pass

chicken = 10
waiting = 1 # 홀 안에는 현재 만석. 대기번호 1부터 시작 
while(True):
    try:
        print("[남은 치킨 : {0}]".format(chicken))
        order = int(input("치킨 몇 마리 주문하시겠습니까?"))
        if order > chicken: # 남은 치킨보다 주문량이 많을 때
            print("재료가 부족합니다.")
        elif order <= 0:
            raise ValueError
        else:
            print("[대기번호 {0}] {1} 마리 주문이 완료되었습니다.".format(waiting, order))
            waiting += 1 
            chicken -= order

        if chicken == 0:
            raise SoldOutError            
    except ValueError:
        print("잘못된 값을 입력하였습니다.")        
    except SoldOutError:
        print("재료가 소진되어 더 이상 주문을 받지 않습니다.")
        break

 

 

참고

- 나도코딩(기본편)

728x90
반응형

'Python > 공부' 카테고리의 다른 글

활용편1 : 기본기  (0) 2022.05.27
기본편: 입출력  (0) 2022.05.25
기본편 : 함수  (0) 2022.05.24
기본편: 제어문(if, for, while)  (0) 2022.05.24
기본편 : 자료구조  (0) 2022.05.23