try~except로 예외 처리하기. 

 

my_list = [1,2,3]

try:
    print("첨자를 입력하세요.")
    index=int(input())
    print(my_list[index]/0)
except ZeroDivisionError as err:
    print("0으로 나눌 수 없습니다.({0})")

except IndexError as err:
    print("잘못된 첨자입니다.({0})".format(err))
  
finally:
    print("나는 마지막에 무조건 나온다.")
    
실행결과

2 입력 시

0으로 나눌 수 없습니다.(division by zero)
나는 마지막에 무조건 나온다.

5 입력 시 

잘못된 첨자입니다.(list index out of range)
나는 마지막에 무조건 나온다.

try는 말 그대로 실행구문이다.

except는 예외 발생 시 

실행되는 구문이다.

finally는 try 구문을 진행하던 except 구문을 진행하던

무조건 실행된다.

raise문은 try문 안에서 예외를 직접 일으킬 수 있다. 

여기서 중요한 점은 except는

 

Exception라는 기본으로 내장되어 있는 class를 사용한다는 것이다. 

Exception 안에 arithmeticError 안에 ZeroDivisionError 등이 있고,

Exception 안에 LookupError 안에 IndexError 등이 있다. 

 

except Exception as err:
	print("1. 예외가 발생하였습니다. ({0}).format(err))

except ZeroDivisionError as err:
	print("2. 0으로 나눌 수 없습니다. ({0}).format(err))
    
except IndexError as err:
	print("3. 잘못된 첨자입니다. ({0}).format(err))

 

실습 1

try:
    s=list(input())
    a=int(input("시작 지점 입력"))
    b=int(input("취할 갯수 입력"))
    
    if (b>len(s)):
        raise Exception("취할 갯수가 처음에 입력한 문자길이 보다 깁니다.")
    elif (a>len(s)):
        raise Exception("시작지점이 입력한 문자열 길이보다 큽니다.")
    elif (a<1 or b<1):
        raise Exception("시작 지점 또는 취할 갯수를 0보다 큰 값을 입력하세요.")
    else: 
        result= s[a-1:a-1+b]
        print(result)


except Exception as err:
    print("예외가 발생하였습니다.({0})".format(err))

else: 
    print("출력에 성공했습니다.")

finally:
    print("나는 마지막에 무조건 출력 됩니다.")

실습 2

class를 사용해서 try except 활용.

부모 클라스를 기본적으로 Exception으로 한다.

class startPointError(Exception):
    def __init__(self):
        super().__init__("시작지점이 입력한 문자열 길이보다 큽니다.")

class extractPointError(Exception):
        def __init__(self):
            super().__init__("취할 갯수가 처음에 입력한 문자길이 보다 깁니다.")

class smallerThanZero(Exception):
    def __init__(self):
        super().__init__("시작 지점 또는 취할 갯수를 0보다 큰 값을 입력하세요.")

try:
    s=list(input())
    a=int(input("시작 지점 입력"))
    b=int(input("취할 갯수 입력"))
    # midstr = s[a-1:len(s)]
    if (b>len(s)):
        raise extractPointError()
    elif (a>len(s)):
        raise startPointError()
    elif (a<1 or b<1):
        raise smallerThanZero()
    else: 
        result= s[a-1:a-1+b]
        print(result)

except Exception as err:
    print("예외가 발생하였습니다.({0})".format(err))

else: 
    print("출력에 성공했습니다.")

finally:
    print("나는 마지막에 무조건 출력 됩니다.")

+ Recent posts