🎉 berenickt 블로그에 온 걸 환영합니다. 🎉
Lang
python
09-예외 처리

1. 예외 처리

1.1

1
print("나누기 전용 계산기입니다.")
2
num1 = int(input("첫 번째 숫자를 입력하세요 : "))
3
num2 = int(input("두 번째 숫자를 입력하세요 : "))
4
print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
5
6
7
try:
8
print("나누기 전용 계산기입니다.")
9
num1 = int(input("첫 번째 숫자를 입력하세요 : "))
10
num2 = int(input("두 번째 숫자를 입력하세요 : "))
11
print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
12
13
except ValueError:
14
print("오류 발생! 잘못된 값을 입력했습니다.")
15

1.2

1
try:
2
print("나누기 전용 계산기입니다.")
3
num1 = int(input("첫 번째 숫자를 입력하세요 : "))
4
num2 = int(input("두 번째 숫자를 입력하세요 : "))
5
print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
6
except ValueError:
7
print("오류 발생! 잘못된 값을 입력했습니다.")
8
except ZeroDivisionError as err:
9
print(err)
10
11
try:
12
print("나누기 전용 계산기입니다.")
13
nums = []
14
nums.append(int(input("첫 번째 숫자를 입력하세요 : ")))
15
nums.append(int(input("두 번째 숫자를 입력하세요 : ")))
16
# nums.append(int(nums[0] / nums[1])) # 연산 결과를 리스트에 추가
17
print("{0} / {1} = {2}".format(nums[0], nums[1], nums[2]))
18
# 값 에러인 경우
19
except ValueError:
20
print("오류 발생! 잘못된 값을 입력했습니다.")
21
# 0으로 나눌 수 없는 에러인 경우
22
except ZeroDivisionError as err:
23
print(err)
24
# 그 외 모든 에러인 경우
25
except Exception as err:
26
print("알 수 없는 오류가 발생했습니다.")
27
print(err)

2. 오류 발생시키기

1
try:
2
print("한 자리 숫자 나누기 전용 계산기입니다.")
3
num1 = int(input("첫 번째 숫자를 입력하세요 : "))
4
num2 = int(input("두 번째 숫자를 입력하세요 : "))
5
if num1 >= 10 or num2 >= 10: # 입력받은 수가 한 자리인지 확인
6
raise ValueError
7
print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
8
except ValueError:
9
print("값을 잘못 입력했습니다. 한 자리 숫자만 입력하세요.")

3. 사용자 정의 예외 처리

1
class BigNumberError(Exception): # 사용자 정의 예외 처리, Exception 클래스 상속
2
def __init__(self, msg):
3
self.msg = msg
4
5
def __str__(self):
6
return self.msg
7
# return "[오류 코드 001] " + self.msg # 오류 메시지 가공
8
9
10
try:
11
print("한 자리 숫자 나누기 전용 계산기입니다.")
12
num1 = int(input("첫 번째 숫자를 입력하세요 : "))
13
num2 = int(input("두 번째 숫자를 입력하세요 : "))
14
if num1 >= 10 or num2 >= 10: # 입력받은 수가 한 자리인지 확인
15
# raise ValueError
16
raise BigNumberError("입력값 : {0}, {1}".format(num1, num2)) # 자세한 오류 메시지
17
print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
18
except ValueError:
19
print("값을 잘못 입력했습니다. 한 자리 숫자만 입력하세요.")
20
except BigNumberError as err: # 📌 사용자 정의 예외 처리
21
print("오류가 발생했습니다. 한 자리 숫자만 입력하세요.")
22
print(err) # 오류 메시지 출력
23
24
25
class SpecialClass:
26
def __init__(self):
27
print("특별한 생성자")
28
29
def __str__(self):
30
return "특별한 메서드"
31
32
33
s = SpecialClass() # 특별한 생성자 출력
34
print(s) # 특별한 메서드 출력

4. 오류와 상관없이 무조건 실행 - finally

1
class BigNumberError(Exception):
2
# pass
3
def __init__(self, msg):
4
self.msg = msg
5
6
def __str__(self):
7
return self.msg
8
9
10
try:
11
print("한 자리 숫자 나누기 전용 계산기입니다.")
12
num1 = int(input("첫 번째 숫자를 입력하세요 : "))
13
num2 = int(input("두 번째 숫자를 입력하세요 : "))
14
if num1 >= 10 or num2 >= 10:
15
raise BigNumberError("입력값 : {0}, {1}".format(num1, num2))
16
print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
17
except ValueError:
18
print("값을 잘못 입력했습니다. 한 자리 숫자만 입력하세요.")
19
except BigNumberError as err:
20
print("오류가 발생했습니다. 한 자리 숫자만 입력하세요.")
21
print(err)
22
finally: # 📌 오류 발생 여부와 상관없이 항상 실행
23
print("계산기를 이용해 주셔서 감사합니다.")

5. 퀴즈. 치킨 주문하기

1
"""
2
Quiz) 동네에 항상 대기 손님이 있는 맛있는 치킨집이 있습니다.
3
대기 손님의 치킨 요리 시간을 줄이고자 자동 주문 시스템을 제작하였습니다.
4
시스템 코드를 확인하고, 적절한 예외처리 구문을 넣으시오.
5
6
조건1 : 1보다 작거나 숫자가 아닌 입력값이 들어올 때는 ValueError로 처리
7
출력 메시지 : "잘못된 값을 입력하였습니다."
8
조건2 : 대기 손님이 주문할 수 있는 총 치킨량은 10마리로 한정
9
치킨 소진 시 사용자 정의 에러[SoldoutError]를 발생시키고 프로그램 종료
10
출력 메시지 : "재고가 소진되어 더 이상 주문을 받지 않습니다"
11
"""
12
13
14
class SoldOutError(Exception):
15
pass
16
17
18
chicken = 10 # 남은 치킨 수
19
waiting = 1 # 대기 번호, 1부터 시작
20
21
while True:
22
try:
23
print("[남은 치킨 : {0}]".format(chicken))
24
order = int(input("치킨을 몇 마리 주문하시겠습니까? "))
25
if order > chicken: # 남은 치킨보다 주문량이 많을 때
26
print("재료가 부족합니다.")
27
elif order <= 0:
28
raise ValueError
29
else:
30
print("[대기 번호 {0}] {1}마리를 주문했습니다.".format(waiting, order))
31
waiting += 1 # 대기 번호 증가
32
chicken -= order # 주문 수만큼 남은 치킨 감소
33
if chicken == 0:
34
raise SoldOutError
35
except ValueError:
36
print("잘못된 값을 입력했습니다.")
37
except SoldOutError:
38
print("재료가 소진돼 더 이상 주문을 받지 않습니다.")
39
break