파이썬 기초편(1) - 예외처리 본문
● 예외가 발생하는 상황
# 예를 들면
ZeroDivisionError 예외 # 0으로 나누는 오류
IndexError 예외 # 인덱싱 연산에서 인덱스 값이 범위를 넘어선 예외
TypeError 예외 # 연산이 불가능한 타입의 값으로 연산을 하는 예외
# 뿐만 아니라 예외의 종류는 정말 많다
● 예외의 처리
# age_expt.py
def main():
print("안녕하세요")
try: # try영역에 있는 문장들이 실행되다가 예외가 발생하면, 그 순간 바로 except영역으로
age = int(input("나이를 입력 : "))
print("입력하신 나이는 다음과 같습니다:", age)
except ValueError: # 실행흐름이 넘어가서 except 영역에 있는 문장들이 실행된다
print("입력이 잘못되었습니다")
print("만나서 반가웠습니다")
main()
except 선언을 보면 ValueError라고 쓰여 있는데(다른 예외도 명시할 수 있음) 이는 ValueError 예외만 처리한다는 뜻이다.
try 영역에서 ValueError 이외의 예외가 발생하면 그 때는 이를 처리할 수 있는 except영역이 없으므로 그냥 종료된다.
● 보다 적극적인 예외처리
● 둘 이상의 예외를 처리하기
# div_expt1.py
def main():
bread = 10
try:
people = int(input("몇 명?"))
print("1인당 빵의 수 : ", bread / people)
print("맛있게 드세요")
except ValueError:
print("입력이 잘못되었습니다")
except ZeroDivisionError:
print("0으로는 나눌 수 없습니다")
main()
● 예외 메세지 출력하기와 finally
# div_expt3.py
def main():
bread = 10
try:
people = int(input("몇 명? "))
print("1인당 빵의 수:", bread/people)
print("맛있게 드세요)
except ValueError as msg: # 변수 msg에 오류 메세지가 담긴다
print("입력 오류")
print(msg) # 오류 메세지 출력
except ZeroDivisionError as msg: # 변수 msg에 오류 메세지가 담긴다
print("0으로 나눌 수 없음")
print(msg) # 오류 메세지 출력
finally: # try 영역으로 진입 시 무조건 실행해야 한다. except없이 finally영역만 구성할 수도 있음
print("어쨌든 프로그램은 종료합니다")
main()
# 결과:
///
몇 명? 0
0으로 나눌 수 없음
division by zero
///
● 모든 예외 그냥 무시가힉
# ignore_expt.py
def main():
bread = 10
try:
people = int(input())
print("1인당 빵의 수 :",bread/people)
print("맛있게 드세요")
except: # 이렇게 하면 모든 예외가 다 걸려든다
print("뭔지는 몰라도 예외가 발생했네요")
# 만약 문자열 출력조차 하고 싶지 않다면
# pass # pass라고 써 놓으면 아무 일도 하지 않는 except영역 만들어짐
main()
'Programming > python' 카테고리의 다른 글
파이썬 기초편(2) - 수정 가능한 객체와 수정 불가능한 객체 (0) | 2022.06.19 |
---|---|
파이썬 기초편(2) - 레퍼런스 카운트와 가비지 컬렉션 (0) | 2022.06.19 |
파이썬 기초편(1) - 클래스와 객체 (0) | 2022.06.14 |
파이썬 기초편(1) - 딕셔너리(Dictionary) (0) | 2022.06.14 |
파이썬 기초편(1) - '모듈의 이해' 그리고 '수학 모듈' 이용하기 (0) | 2022.06.12 |
Comments