1. 예외 처리
1.1
1print("나누기 전용 계산기입니다.")2num1 = int(input("첫 번째 숫자를 입력하세요 : "))3num2 = int(input("두 번째 숫자를 입력하세요 : "))4print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))567try:8print("나누기 전용 계산기입니다.")9num1 = int(input("첫 번째 숫자를 입력하세요 : "))10num2 = int(input("두 번째 숫자를 입력하세요 : "))11print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))1213except ValueError:14print("오류 발생! 잘못된 값을 입력했습니다.")15
1.2
1try:2print("나누기 전용 계산기입니다.")3num1 = int(input("첫 번째 숫자를 입력하세요 : "))4num2 = int(input("두 번째 숫자를 입력하세요 : "))5print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))6except ValueError:7print("오류 발생! 잘못된 값을 입력했습니다.")8except ZeroDivisionError as err:9print(err)1011try:12print("나누기 전용 계산기입니다.")13nums = []14nums.append(int(input("첫 번째 숫자를 입력하세요 : ")))15nums.append(int(input("두 번째 숫자를 입력하세요 : ")))16# nums.append(int(nums[0] / nums[1])) # 연산 결과를 리스트에 추가17print("{0} / {1} = {2}".format(nums[0], nums[1], nums[2]))18# 값 에러인 경우19except ValueError:20print("오류 발생! 잘못된 값을 입력했습니다.")21# 0으로 나눌 수 없는 에러인 경우22except ZeroDivisionError as err:23print(err)24# 그 외 모든 에러인 경우25except Exception as err:26print("알 수 없는 오류가 발생했습니다.")27print(err)
2. 오류 발생시키기
1try:2print("한 자리 숫자 나누기 전용 계산기입니다.")3num1 = int(input("첫 번째 숫자를 입력하세요 : "))4num2 = int(input("두 번째 숫자를 입력하세요 : "))5if num1 >= 10 or num2 >= 10: # 입력받은 수가 한 자리인지 확인6raise ValueError7print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))8except ValueError:9print("값을 잘못 입력했습니다. 한 자리 숫자만 입력하세요.")
3. 사용자 정의 예외 처리
1class BigNumberError(Exception): # 사용자 정의 예외 처리, Exception 클래스 상속2def __init__(self, msg):3self.msg = msg45def __str__(self):6return self.msg7# return "[오류 코드 001] " + self.msg # 오류 메시지 가공8910try:11print("한 자리 숫자 나누기 전용 계산기입니다.")12num1 = int(input("첫 번째 숫자를 입력하세요 : "))13num2 = int(input("두 번째 숫자를 입력하세요 : "))14if num1 >= 10 or num2 >= 10: # 입력받은 수가 한 자리인지 확인15# raise ValueError16raise BigNumberError("입력값 : {0}, {1}".format(num1, num2)) # 자세한 오류 메시지17print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))18except ValueError:19print("값을 잘못 입력했습니다. 한 자리 숫자만 입력하세요.")20except BigNumberError as err: # 📌 사용자 정의 예외 처리21print("오류가 발생했습니다. 한 자리 숫자만 입력하세요.")22print(err) # 오류 메시지 출력232425class SpecialClass:26def __init__(self):27print("특별한 생성자")2829def __str__(self):30return "특별한 메서드"313233s = SpecialClass() # 특별한 생성자 출력34print(s) # 특별한 메서드 출력
4. 오류와 상관없이 무조건 실행 - finally
1class BigNumberError(Exception):2# pass3def __init__(self, msg):4self.msg = msg56def __str__(self):7return self.msg8910try:11print("한 자리 숫자 나누기 전용 계산기입니다.")12num1 = int(input("첫 번째 숫자를 입력하세요 : "))13num2 = int(input("두 번째 숫자를 입력하세요 : "))14if num1 >= 10 or num2 >= 10:15raise BigNumberError("입력값 : {0}, {1}".format(num1, num2))16print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))17except ValueError:18print("값을 잘못 입력했습니다. 한 자리 숫자만 입력하세요.")19except BigNumberError as err:20print("오류가 발생했습니다. 한 자리 숫자만 입력하세요.")21print(err)22finally: # 📌 오류 발생 여부와 상관없이 항상 실행23print("계산기를 이용해 주셔서 감사합니다.")
5. 퀴즈. 치킨 주문하기
1"""2Quiz) 동네에 항상 대기 손님이 있는 맛있는 치킨집이 있습니다.3대기 손님의 치킨 요리 시간을 줄이고자 자동 주문 시스템을 제작하였습니다.4시스템 코드를 확인하고, 적절한 예외처리 구문을 넣으시오.56조건1 : 1보다 작거나 숫자가 아닌 입력값이 들어올 때는 ValueError로 처리7출력 메시지 : "잘못된 값을 입력하였습니다."8조건2 : 대기 손님이 주문할 수 있는 총 치킨량은 10마리로 한정9치킨 소진 시 사용자 정의 에러[SoldoutError]를 발생시키고 프로그램 종료10출력 메시지 : "재고가 소진되어 더 이상 주문을 받지 않습니다"11"""121314class SoldOutError(Exception):15pass161718chicken = 10 # 남은 치킨 수19waiting = 1 # 대기 번호, 1부터 시작2021while True:22try:23print("[남은 치킨 : {0}]".format(chicken))24order = int(input("치킨을 몇 마리 주문하시겠습니까? "))25if order > chicken: # 남은 치킨보다 주문량이 많을 때26print("재료가 부족합니다.")27elif order <= 0:28raise ValueError29else:30print("[대기 번호 {0}] {1}마리를 주문했습니다.".format(waiting, order))31waiting += 1 # 대기 번호 증가32chicken -= order # 주문 수만큼 남은 치킨 감소33if chicken == 0:34raise SoldOutError35except ValueError:36print("잘못된 값을 입력했습니다.")37except SoldOutError:38print("재료가 소진돼 더 이상 주문을 받지 않습니다.")39break