파이썬 기본 정리(6) - 예외 처리

yerim·2023년 1월 19일
0

파이썬 기본 정리

목록 보기
6/11

나도코딩 '파이썬 코딩 무료 강의(기본편) - 6시간 뒤면 여러분도 개발자가 될 수 있어요' 정리

예외처리(try~except)

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:
    print("알 수 없는 에러가 발생하였습니다.")


에러 발생시키기

##의도적으로 에러 발생시키기
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: 예외처리문에서 정상처리, 오류처리에 상관없이 무조건 실행되는 부분
#try 문에서 제일 마지막 부분에 씀
finally:
    print("계산기를 이용해 주셔서 감사합니다.")
    
##프로그램 실행 예시##
# 한 자리 숫자 나누기 전용 계산기입니다
# 첫 번째 숫자를 입력하세요 : 6
# 두 번째 숫자를 입력하세요 : 3
# 6 / 3 = 2
# 계산기를 이용해 주셔서 감사합니다.

# 한 자리 숫자 나누기 전용 계산기입니다
# 첫 번째 숫자를 입력하세요 : 10
# 두 번째 숫자를 입력하세요 : 5
# 에러가 발생하였습니다. 한 자리 숫자만 입력하세요!!
# 입력값 : 10, 5
# 계산기를 이용해 주셔서 감사합니다.


Quiz 9

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

# 조건1: 1보다 작거나 숫자가 아닌 입력값이 들어올 때는 ValueError 로 처리
#       출력메세지 : "잘못된 값을 입력하였습니다."
# 조건2: 대기 손님이 주문할 수 있는 총 치킨량은 10마리로 한정
#       치킨 소진 시 사용자 정의 에러(SoldOutError)를 발생시키고 프로그램 종료
#       출력메세지 : "재고가 소진되어 더 이상 주문을 받지 않습니다."

# [코드]
# chicken = 10    #주문할 수 있는 총 치킨량
# waiting = 1 #홀 안에는 현재 만석. 대기 번호 1부터 시작

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





chicken = 10    #주문할 수 있는 총 치킨량
waiting = 1 #홀 안에는 현재 만석. 대기 번호 1부터 시작

#사용자 정의 에러 SoldOutError 정의
class SoldOutError(Exception):
    def __init__(self):
        pass
    
while(True):
    try:
        print("[남은 치킨 : {0}]" .format(chicken))
        order = int(input("치킨 몇 마리 주문하시겠습니까? "))
        
        if order > chicken:  #남은 치킨보다 주문량이 많을 때
            print("재료가 부족합니다.")
        elif order <= 0:    #주문량이 1 미만일 때
            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	#이부분에서 break를 걸어서 프로그램 종료


##프로그램 실행 예시##
# [남은 치킨 : 10]
# 치킨 몇 마리 주문하시겠습니까? 3
# [대기번호 1]: 3 마리 주문이 완료되었습니다.
# [남은 치킨 : 7]
# 치킨 몇 마리 주문하시겠습니까? -1
# 잘못된 값을 입력하였습니다.
# [남은 치킨 : 7]
# 치킨 몇 마리 주문하시겠습니까? 5
# [대기번호 2]: 5 마리 주문이 완료되었습니다.
# [남은 치킨 : 2]
# 치킨 몇 마리 주문하시겠습니까? 4
# 재료가 부족합니다.
# [남은 치킨 : 2]
# 치킨 몇 마리 주문하시겠습니까? 2
# [대기번호 3]: 2 마리 주문이 완료되었습니다.
# 재고가 소진되어 더 이상 주문을 받지 않습니다.
profile
hello!

0개의 댓글