본문 바로가기

파이썬 기초편(1) - 예외처리 본문

Programming/python

파이썬 기초편(1) - 예외처리

ksoes 2022. 6. 16. 23:01

 

 

 

● 예외가 발생하는 상황

# 예를 들면
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()

 

Comments