코딩(개발)/파이썬

파이썬 예외처리

플랜데버 2020. 12. 22. 10:02

공부하는게 취미인 사람들 투딩


#예외처리 : 에러발생시 문제를 표시해 준다. 클라이언트를 위해서나 개발자를 위해서나 필요한 작업

코드

try:
    print("나누기 전용 계산기 입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요"))
    num2 = int(input("두 번째 숫자를 입력하세요"))
    print("{0} / {1} = {2}".format(num1,num2, int(num1/num2)))
except ValueError: ①
    print("에러! 잘못된 값을 입력하였습니다.")
except ZeroDivisionError as err:  ②
    print(err)
except Exception as err:  ③
    print("알수 없는 에러가 발생하였습니다.")
    print(err)

① 입력 받은 값 에러 : int로 형변환 할 수 없는 값을 받으면 등등의 에러가 나온다.

② 0으로 나눌수 없다는 에러가 나온다.

③ 모든 에러가 나온다.

 

※ 파이썬 표준 exception

Exception 내용
 ValueError  부적절한 값을 가진 인자를 받았고, 상황이 구체적인 예외로 설명되지 않는 경우
 OverflowError  너무 큰 값을 산술 계산에서 사용할 때
 ZeroDivisionError  0으로 나눌때
 IOError  Input/Output 오류가 있을 때
 EOFError  file의 끝(end of file)을 지나서 읽으려고 할 때
 ImportError  import 하려는 모듈을 찾을 수 없을 때
 IndexError  index가 적정 범위를 넘었을 때
 FileNotFoundError  파일을 찾을 수 없을 때
 TypeError  적절하지 못한 데이터 타입이 사용 되었을 때
 NameError  local 또는 global 변수를 찾을 수 없을 때
 IndentationError  들여쓰기에 오류가 있을 때
 KeyError  존재 하지 않는 키(dict 데이터 타입)를 사용 했을때
 SyntaxError  구문 오류가 발생했을 때

 

 

 

 

#에러 발생시키기

코드

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("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요")

 첫번째나 두번째 숫자가 10보다 크면 에러를 발생시켜  ②을 건너뛰고 아래 execpt 문으로 내려보낸다.

①조건에 걸리지 않으면 실행된다.

 

 

#사용자 정의 에러

코드

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("입력값 :{0} , {1}".format(num1,num2)) 

    print("{0} / {1} = {2}".format(num1,num2, int(num1/num2)))

except ValueError :

    print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요"

except BigNumberError as err:   

    print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요")

    print(err)

① 에러처리 할 class 를  Exception class 를 상속받아 만든다. 

BigNumberError를 일으킨다. 원하는 메세지를 던져놓고 값을 가지고 있다가

③ execpt 처리가 될때 메세지를 받아와서 출력해 준다.

 

 

 

#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("입력값 :{0} , {1}".format(num1,num2))

    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]를 발생 시키고 프로그램 종료

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



코드
class SoldOutError(Exception):
    pass

chicken = 10
waiting = 1
    
while(True):     
    try:
        order = int(input("치킨 몇마리 주문 하시겠습니까?"))
        if order < 1 :
            raise ValueError
        if order > chicken :
            print("재료가 부족합니다.")
        else :
            print("[대기 번호 {0}] {1} 마리 주문이 완료되었습니다.".format(waiting,order))
            waiting += 1
            chicken -= order
            print(" 남은 치킨수 : {0}".format(chicken))
            
        if chicken == 0 :
            raise SoldOutError
    except ValueError :
        print("잘못된 값을 입력하였습니다.") 
    except SoldOutError as err:
        print("재고가 소진 되어 더 이상 주문을 받지 않습니다.")
        break
    finally:
        print("감사합니다.")

 

 

 

더보기

블로그에는 우클릭 방지가 걸려있어요. 코드복사는 카페에서 가능 합니다.

투딩카페의 이 컨텐츠보기

 

 

파이썬 기초는 나도코딩님이 인프런사이트에서 강의한 내용을 바탕으로 공부한 내용을 정리한 것 입니다.
추천 :  ★

 

목소리 : 

속도 :

내용 : 

결과물 :