본문 바로가기

개발/Python

부스트캠프 AI Tech 3기 Pre-Course [4]-1 Exception Handling / 예외처리

Exception : 예외

예상치 못한 예외들이 발생함

  • 예상 가능한 예외
    발생 여부를 프로그래머가 사전에 인지
    개발자가 명시적으로 정의해야함
    처리 : if문
  • 예상 불가능한 예외
    인터프리터 과정에서 발생하는 예외
    ex)정수를 0으로 나눔, 리스트의 범위를 넘어가는 값 호출
    처리 : exception handling

Exception handling

try:
	예외 발생 가능 코드
except <Exception Type>:
	예외 발새시 대응하는 코드
else:
    예외가 발생하지 않을 때 동작하는 코드

if문으로 대체 가능하지만 try~except 문을 더 권장한다.

for i in range(10):
    try:
    	print(10/i)
    except ZeroDivisionError:
    	print("Error")
        print("Not divided by 0")
    except IndexError as e:
        print(e)

ZeroDivisionError는 built-in error이다.

exception을 실행하고 하고 다시 코드를 수행한다.

 

IndexError 처럼 명시하는 것이 좋다. Exception 전체를 잡아버리면 어디에서 명확하지 않기에 좋지 않다.

try:
    예외 발생 가능 코드
except <Exception Type>:
    예외 발생시 동작하는 코드
finally:
    예외 발생 여부와 상관없이 실행됨

raise 구문

필요에 따라 강제 Exception을 발생시킴

raise <Exception Type>(예외정보)

이렇게 사용하면 되는데, 밑은 예시이다.

while True:
    value=input("변환할 정수 값을 입력하세요")
    for digit in value:
        if digit not in "0123456789":
            raise ValueError("숫자값을 입력하지 않으셨습니다")
    print("정수값으로 변환된 숫자 -", int(value))

value값이 정수가 아니면 ValueError를 발생시켜 버린다.

 

assert

assert 예외조건
def get_binary_number(decimal_number):
    assert isinstance(decimal_number,int)
    return bin(decimal_number)
    
print(get_binary_number(10.0))

assert문에서 int가 입력되었는지 아닌지를 판단한다.

isinstance가 True나 False로 나오게 되고, False일 때는 AssetionError를 발생시킨다.

 

 

 

 

 

Reference : 부스트캠프 AI Tech 3기 Pre-Course - Module and Project