예외처리.py

2023. 3. 17. 22:54·python
## 예외처리
# 에러가 발생했을 때 그에대해 처리해주는 것을 의미함.

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]))
except ValueError:
    print("잘못된 값을 입력했습니다.")
except ZeroDivisionError as err:
    print("0으로 나눌 수 없습니다.")
    # 에러문장을 그대로 출력할 수 있다.
    print(err)
# ValueError / ZeroDivisionError 이 아닌 다른 에러 발생 시, 동작함
except:
    print("알 수 없는 에러가 발생하였습니다.")
  • 예외처리 란 에러가 발생했을 때 처리해주는 것을 의미함.
  • try 실행코드 except 에러처리 로 사용한다.
## 사용자 정의 예외처리

class BigNUmberError(Exception):
    # pass
    # 메시지를 같이 넣고싶을 때,
    def __init__(self, msg):
        self.msg = msg
    def __str__(self):
        return self.msg
  • 내가 직접 class를 작성하여 예외처리를 만들 수 있음.
    ㄴ err 로 메시지 전달하고싶을 때, __str__(self): return self.msg 사용.
## 에러 발생시키기
try:
    print("한 자리 숫자 나누게 계산기입니다.")
    nums = []
    for i in range(2):
        nums.append(int(input("숫자를 입력하세요 : ")))
        # 입력숫자가 10보다 크면 VAlueError 발생시킴
        if nums[i] <=0:
            raise ValueError
        elif nums[i] >=10:
            # BigNUmberError 의 괄호안의 내용을 class의 msg로 던짐.
            raise BigNUmberError("{}번째 입력값 : {}".format(i+1, nums[i]))
    print("{} / {} = {}".format(nums[0], nums[1], int(nums[0]/nums[1])))
except ValueError:
    print("숫자가 너무 작습니다. 1~10 사이의 숫자를 입력하세요.")
# BingNumberError 의 self.msg 를 err 로 return함.
except BigNUmberError as err:
    print("숫자가 너무 큽니다. 1~10 사이의 숫자를 입력하세요.")
    print(err)
  • raise error를 사용하여 특정 경우, 특정 에러를 발생시킬 수 있다.
    ㄴ raise class를 사용하여 사용자 정의 예외처리할 수 있다.
## finally
# 예외처리구문이 정상작동하든 오류가 나든 반드시 실행되는 구문
finally:
    print("계산기가 종료되었습니다.")
  • finally 는 예외처리구문 정상작동 여부와 관계없이 finally 안의 구문이 실행된다.
## 퀴즈
'''
1. 1보다 작거나 숫자가 아닌 입력값이 들어올 때는 ValueError로 처리
   출력 메시지 : "잘못된 값을 입력하였습니다."
2. 대기 손님이 주문할 수 있는 치킨양을 10마리로 한정.
   치킨 소진 시, 사용자 정의 에러 SoldoutError을 발생시킨 뒤 프로그램 종료
   출력 메시지 : "재고가 소진되어 더이상 주문을 받지 않습니다."
'''

chicken = 20
waiting = 1
class SoldoutError(Exception):
    def __init__(self, msg):
        self.msg = msg
    def __str__(self):
        return self.msg

while(True):
    try:
        if chicken == 0:
            raise SoldoutError("재고가 소진되어 더이상 주문을 받지 않습니다.")
        print("남은 치킨 : {}".format(chicken))
        order = int(input("치킨 몇마리를 주문하시겠습니까?"))

        if order < 1:
            raise ValueError
        elif order > 10:
            print("대기손님은 치킨을 10마리까지 주문 가능합니다.")
        elif order > chicken:
            print("재료가 부족합니다.")
        else:
            print("[대기번호 {}] {}마리 주문이 완료되었습니다."\\
                .format(waiting, order))
            waiting +=1
            chicken -=order
        
    except ValueError:
        print("잘못된 값을 입력하였습니다.")
    except SoldoutError as err:
        print(err)
        break

'python' 카테고리의 다른 글

모듈과 패키지.py  (0) 2023.03.20
클래스.py  (0) 2023.03.17
표준입출력.py  (0) 2023.03.14
함수.py  (0) 2023.03.11
분기.py  (0) 2023.03.11
'python' 카테고리의 다른 글
  • 모듈과 패키지.py
  • 클래스.py
  • 표준입출력.py
  • 함수.py
몽자비루
몽자비루
코딩공부 정리용 블로그입니다.
  • 몽자비루
    공부하는 블로그
    몽자비루
  • 전체
    오늘
    어제
    • 분류 전체보기 (165) N
      • python (30)
        • python_selenium (16)
        • python_pygame (3)
      • appium (0)
      • 쿠버네티스 (60)
        • linux (8)
        • shell programming (8)
        • docker (18)
        • cka (23)
      • postman&API (16)
      • QA성장하기 (30)
        • 개발자에서 아키텍트로 스터디 (6)
        • 소프트웨어 공학 이해도 높이기 (6)
        • 테스팅 전문 지식 쌓기 (18)
      • 에러일기 (1)
      • AWS (27) N
      • Jmeter (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    도커
    포스트맨
    vi에디터
    스터디
    사드웨어리소스
    테스트 결과보고서
    API
    cka
    앱공존성
    .cpu
    k8s
    공존성테스트
    테스트스크립트
    로스트아크
    개발자에서아키텍트로
    네트워크 테스트
    qa
    LOSTARK
    postman
    테스트 계획서 만들어보기
    python
    테스트 계획서
    e2c
    linux
    리눅스
    QAKOREA
    애플리케이션로그
    application log
    로스트아크api
    쿠버네티스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
몽자비루
예외처리.py
상단으로

티스토리툴바