나도코딩님의 동영상 진짜 이해되도록 알려주심
파이썬 기본은 이 동영상으로 끝내도 될 듯 bbbbb
https://www.youtube.com/watch?v=kWiCuklohdY
예외 처리
Try & Except
print("나누기 전용 계산기입니다")
num1= int(input("첫 번째 숫자를 적으세요: "))
num2= int(input("두 번째 숫자를 적으세요: "))
print(f"{num1} / {num2} = {int(num1/num2)}")
여기서 input 값에 숫자가 아닌 문자(예: 삼)을 넣게 되면 오류가 뜨게 됨

오류를 없애기 위해 Try와 Except을 사용
=> 에러 발생 시, 원하는 문구가 나오도록 할 수 있음
try:
print("나누기 전용 계산기입니다")
num1= int(input("첫 번째 숫자를 적으세요: "))
num2= int(input("두 번째 숫자를 적으세요: "))
print(f"{num1} / {num2} = {int(num1/num2)}")
except ValueError:
print("에러! 숫자를 입력하세요")

또 다른 방식으로 위 코드 짤 수 도 있음
nums라는 빈 리스트를 만들어서 그 리스트에 넣는 형태
try:
print("나누기 전용 계산기입니다")
nums = []
nums.append(int(input("첫 번째 숫자를 적으세요: ")))
nums.append(int(input("두 번째 숫자를 적으세요: ")))
nums.append(int(nums[0]/nums[1]))
print(f"{nums[0]} / {nums[1]} = {nums[2]}")
except ValueError:
print("에러! 숫자를 입력하세요")
예외처리 방식:
(1) ValueError : Value값을 잘못 넣은 상태에서 처리
(2) ZeroDivisionError : 0값을 나눗셈에 넣어서 오류난 상태에서 처리
err = "division by zero"라고 입력될
(3) except 만 : 아래의 경우에는 ValueError, ZeroDivisionError 외에 모든 에러들을 처리
except ValueError:
print("에러! 숫자를 입력하세요")
except ZeroDivisionError as err:
print(err)
except :
print("알 수 없는 에러가 발생했습니다")
except 로 사용 시, 어떤 에러인지 모름
=> 어떤 에러인지 알고 싶은 경우, 아래와 같이 except Exception as err을 사용하면 에러 원인 확인 가능
except Exception as err:
print("알 수 없는 에러가 발생했습니다")
print(err)
Raise
우리가 의도적으로 에러를 발생시켜서 원하는 값을 만들 수 있음
try:
print("나누기 전용 계산기입니다")
num1= int(input("첫 번째 숫자를 적으세요: "))
num2= int(input("두 번째 숫자를 적으세요: "))
if num1 >= 10 or num2 >= 10:
raise ValueError
print(f"{num1} / {num2} = {int(num1/num2)}")
except ValueError:
print("에러! 한 자리 숫자를 넣으세요")

class를 만들어서 오류 처리 가능
raise를 BignumberError로 넣었기 때문에 아래에 except ValueError 이 있더라도 except BignumberError의 문구를 따라서 나옴
class BignumberError(Exception):
pass
try:
print("나누기 전용 계산기입니다")
num1= int(input("첫 번째 숫자를 적으세요: "))
num2= int(input("두 번째 숫자를 적으세요: "))
if num1 >= 10 or num2 >= 10:
raise BignumberError
print(f"{num1} / {num2} = {int(num1/num2)}")
except ValueError:
print("에러! 한 자리 숫자를 넣으세요")
except BignumberError:
print("오류가 발생하였습니다. 한 자리 숫자를 넣으세요")

입력값을 어떤걸 넣었는지 확인하려면 아래와 같이 코딩 짜기:
raise BignumberError에 입력값 msg가 들어가게 되며 = err 값
=> except BignumberError as err 하고 print(err)하게 되면 raise에 넣었던 값이 출력
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(f"입력값: {num1}, {num2}")
print(f"{num1} / {num2} = {int(num1/num2)}")
except ValueError:
print("에러! 한 자리 숫자를 넣으세요")
except BignumberError as err:
print("오류가 발생하였습니다. 한 자리 숫자를 넣으세요")
print(err)
Finally
마지막에 나오는 내용으로, 값이 잘 나오거나/ / / 오류가 뜨거나 상관없이 나오는 내용
finally:
print("계산해주셔서 감사합니다")

나온 값과 같이, 값이 잘 나오더라도 "계산해주셔서 감사합니다"
오류가 발생했더라도 "계산해주셔서 감사합니다" 출력
Quiz 부분
# 동네에 항상 대기 손님이 있는 맛있는 치킨집 있음
# 대기 손님의 치킨 요리 시간 줄이고자 자동 주문 시스템 제작
# 시스템 코드 확인하고 적절한 에외처리 구문 넣기
조건 1
- 1보다 작거나 숫자가 아닌 입력값이 들어올 때는 VlaueError로 처리
- 출력 메시지: "잘못된 값을 입력하였습니다"
조건 2:
- 대기 손님이 주문할 수 있는 총 치킨량은 10마리로 한정
- 치킨 소진 시 사용자 정의 에러[SoldOutError]를 발생시키고 프로그램 종료
- 출력 메시지: "재고가 소진되어 더 이상 주문 받지 않습니다."
[코드]
chicken = 10
waiting = 1 #홀 안에는 현재 만석, 대기번호 1부터 시작
while(True):
print(f"[남은 치킨: {chicken}]")
order = int(input("치킨 몇 마리 주문하시겠습니까?"))
if order > chicken: #남은 치킨보다 주문량 많을 때
print("재료가 부족합니다.")
else:
print(f"[대기번호 {waiting}] {order} 마리 주문이 완료되었습니다.")
waiting += 1
chicken -= order
#답
제공 받은 코드에서 추가 필요했던 코드 :
- SoldOutError class 입력
- elif order <= 0: raise 부분 입력
- except 부분 입력
chicken = 10
waiting = 1 #홀 안에는 현재 만석, 대기번호 1부터 시작
class SoldOutError (Exception):
pass
while(True):
try:
print(f"[남은 치킨: {chicken}]")
order = int(input("치킨 몇 마리 주문하시겠습니까?"))
if order > chicken: #남은 치킨보다 주문량 많을 때
print("재료가 부족합니다.")
elif order <= 0:
raise ValueError
else:
print(f"[대기번호 {waiting}] {order} 마리 주문이 완료되었습니다.")
waiting += 1
chicken -= order
if chicken == 0:
raise SoldOutError
except ValueError:
print("잘못된 값을 입력하였습니다")
except SoldOutError:
print("재고가 소진되어 더 이상 주문 받지 않습니다.")
break
'공부 & 프로젝트 > 파이썬' 카테고리의 다른 글
| [파이썬] 웹스크래핑 기초 1: html, xpath, 크롬 (0) | 2025.10.17 |
|---|---|
| [파이썬] 모듈, 패키지, 설치 (pip), 내장함수, 외장함수(glob, os, time, datetime, timedelta) (0) | 2025.10.15 |
| [파이썬] Class : init, 메소드, 상속, 다중상속, 메소드 오버라이딩 (1) | 2025.10.15 |
| [파이썬] 문자열 포맷 (0) | 2025.10.11 |
| 헷갈리는 파이썬 코딩 구조 : 메서드와 내장함수 (0) | 2025.10.11 |