[나도코딩 파이썬 기본편] #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(num1, num2, int(num1/num2)))except ValueError:print("잘못된 값을 입력하셨습니다.")
except ZeroDivisionError as err:print(err)
except Exception as err:print("알 수 없는 에러가 발생했습니다.")print(err)
- try와 except로 구분하여 잘못된 값을 입력하더라도 코드 에러가 뜨는 것이 아닌 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 ValueErrorprint("{} / {} = {}" .format(num1, num2, int(num1/num2)))
except ValueError:print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
- 조건문을 이용해 num1,2가 10이상이라면 raise ValueError로 의도적으로 에러를 발생시켜 except ValueError로 값을 넘긴다.
3. 사용자 정의 예외처리
class BigNumberError(Exception):
passtry:print("한 자리 숫자 나누기 전용 계산기입니다.")num1 = int(input("첫 번째 숫자를 입력하세요 : "))num2 = int(input("두 번째 숫자를 입력하세요 : "))if num1 >= 10 or num2 >= 10:raise BigNumberErrorexcept BigNumberError:print("에러가 발생했습니다. 한 자리 숫자만 입력하세요.")
- class를 이용하여 사용자가 에러 함수로 새롭게 생성할 수 있다.
- 에러가 난 이유를 표시하려면 __init__ 함수를 이용하면 된다. (아래 참고)
class BigNumberError(Exception):
def __init__(self, msg):self.msg = msgdef __str__(self):return self.msg
except BigNumberError as err:raise BigNumberError("입력값 : {}, {}" .format(num1, num2))
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 ValueErrorelse:print("[대기번호 {}] {}마리 주문이 완료되었습니다." .format(waiting, order))waiting += 1chicken -= orderif chicken == 0:raise SoldOutError
except ValueError:print("잘못된 값을 입력하였습니다.")except SoldOutError:print("재고가 소진되어 더 이상 주문을 받지 않습니다.")break
강의 메모, 복습용으로 작성된 글입니다.
728x90
반응형
LIST
'독학으로 취업 문 뿌수기 > Python' 카테고리의 다른 글
[나도코딩 파이썬 기본편] #11 모듈, 패키지 따라하기 (0) | 2022.02.03 |
---|---|
[나도코딩 파이썬 기본편] #9 클래스 Class 따라하기 (0) | 2022.02.02 |