[나도코딩 파이썬 기본편] #10 예외처리 따라하기

2022. 2. 2. 20:39독학으로 취업 문 뿌수기/Python

728x90
반응형
SMALL

 


1. (에러에 대한) 예외처리

<아래의 try와 같은 값>
try:
    print("나누기 전용 계산기입니다.")
    nums = []
    nums.append(int(input("첫 번째 숫자를 입력하세요 : ")))
    nums.append(int(input("두 번째 숫자를 입력하세요 : ")))
    nums.append(int(nums[0] / nums[1]))
    print("{} / {} = {}" .format(nums[0], nums[1], nums[2]))
 
try:
    print("나누기 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    print("{} / {} = {}" .format(num1num2int(num1/num2)))

except ValueError:
    print("잘못된 값을 입력하셨습니다.")

except ZeroDivisionError as err:
    print(err)

except Exception as err:
    print("알 수 없는 에러가 발생했습니다.")
    print(err)
 
  • tryexcept로 구분하여 잘못된 값을 입력하더라도 코드 에러가 뜨는 것이 아닌 ValueError의 프린트 값을 출력한다.
  • 'as err: print(err)' 에러가 난 이유를 표시해준다. 
  • except ZeroDivisionError as err는 0으로는 나눌 수 없기 때문에 0에 대한 except를 따로 지정했다.

2. 에러 발생하기
try:
    print("한 자리 숫자 나누기 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    if num1 >= 10 or num2 >= 10:
        raise ValueError
    print("{} / {} = {}" .format(num1num2int(num1/num2)))

except
 ValueError:
    print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
 
  • 조건문을 이용해 num1,2가 10이상이라면 raise ValueError로 의도적으로 에러를 발생시켜 except ValueError로 값을 넘긴다.

3. 사용자 정의 예외처리

class BigNumberError(Exception):
    pass
 
try:
    print("한 자리 숫자 나누기 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    if num1 >= 10 or num2 >= 10:
        raise BigNumberError
 
except BigNumberError:
    print("에러가 발생했습니다. 한 자리 숫자만 입력하세요.")
 
  • class를 이용하여 사용자가 에러 함수로 새롭게 생성할 수 있다.
  • 에러가 난 이유를 표시하려면 __init__ 함수를 이용하면 된다. (아래 참고)
class BigNumberError(Exception):
    def __init__(selfmsg):
        self.msg = msg
   
    def __str__(self):
        return self.msg

        raise BigNumberError("입력값 : {}{}" .format(num1num2))

 

except BigNumberError as err:
    print("에러가 발생했습니다. 한 자리 숫자만 입력하세요.")
    print(err)
 

4. finally

finally:
    print("계산기를 이용해주셔서 감사합니다.")
  • try 문 맨마지막에 쓸 수 있다.
  • 에러 여부에 상관없이 항상 출력된다

Quiz. 아래 조건을 만족하는 예외처리구문 작성하기

조건1: 1보다 작거나 숫자가 아닌 입력값이 들어올 때는 ValueError로 처리 (출력 메시지: "잘못된 값을 입력하였습니다.")

조건2: 대기 손님이 주문할 수 있는 총 치킨량은 10마리로 한정. 치킨 소진 시 사용자 정의 에러(SoldOutError)를 발생시키고 프로그램 종료. (출력 메시지: "재고가 소진되어 더 이상 주문을 받지 않습니다.")

class SoldOutError(Exception):
    pass

chicken
 = 10 #남은 치킨
waiting = 1

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

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

강의 메모, 복습용으로 작성된 글입니다.

728x90
반응형
LIST