파이썬 예외처리
공부하는게 취미인 사람들 투딩
#예외처리 : 에러발생시 문제를 표시해 준다. 클라이언트를 위해서나 개발자를 위해서나 필요한 작업
코드
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("감사합니다.")
블로그에는 우클릭 방지가 걸려있어요. 코드복사는 카페에서 가능 합니다.
파이썬 기초는 나도코딩님이 인프런사이트에서 강의한 내용을 바탕으로 공부한 내용을 정리한 것 입니다.
추천 : ★★★★★
목소리 :
속도 :
내용 :
결과물 :