본문 바로가기

_Programming/Python

Basic.예외처리

예외처리

except 이용.

err사용시 내제되어 있는 err의 내용이 출력됌.

try:
    print("나누기 전용 계산기입니다.")
    nums = []
    nums.append(int(input("첫 번째 숫자를 입력하세요 : ")))
    nums.append(int(input("첫 번째 숫자를 입력하세요 : ")))
    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("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")

사용자 정의 예외처리

직접 예외 상황을 정의 하고 사용

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

#02
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
        print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))
except ValueError:
        print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
except BigNumberError as err:
    print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요.")
    print(err)

Finally

무조건 실행 되는 문장

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
        print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))
except ValueError:
        print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
except BigNumberError as err:
    print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요.")
    print(err)
finally:
    print("계산기를 이용해 주셔서 감사합니다.")

Quiz) 

동네에 항상 대기 손님이 있는 맛있는 치킨집이 있습니다.

대기 손님의 치킨 요리 시간을 줄이고자 자동 주문 시스템을 제작하였습니다.

시스템 코드를 확인하고 적절한 예외처리 구문을 넣으시오.

 

조건1 : 1보다 작거나 숫자가 아닌 입력값이 들어올 떄는  ValueError로 처리 

    출력메세지 : "잘못된 값을 입력 하였습니다."

조건2 : 대기 손님이 주문할 수 있는 총 치킨양은 10마리로 한정

        치킨 소진시 사용자 정의 에러[SoldOutError]를 발생시키고 프로그램 종료

    출력메세지 : "재고가 소진되어 더 이상 주문을 받지 않습니다."

chicken = 10

waiting = 1 # 홀 안에는 현재 만석. 대기번호 1부터 시작.

 

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

chicken = 10
waiting = 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

 

 

 

 

출처: www.youtube.com/watch?v=kWiCuklohd

'_Programming > Python' 카테고리의 다른 글

Error.-m pip install --upgrade pip  (0) 2020.12.18
Basic.모듈과 패키지  (0) 2020.09.15
Basic.클래스  (0) 2020.09.11
Basic.입출력  (0) 2020.09.10
Basic.함수  (0) 2020.09.09