예외란
- 파이썬에서 예외는 문법적으로는 문제가 없는 코드를 실행하는 중에 발생하는 오류
- 표준 라이브러리(클래스)에 정의 되어 있는 예외는 자동적으로 발생됨으로, except에 예외형식만 명시 해 주면 됨
- 표준 라이브러리에 없는 예외는
- Exception 클래스를 정보와 함께 직접 발생 시키고, except에 예외형식을 명시 하거나
- 예외 라이브러리(클래스)를 Exception 클래스의 파생 클래스로 직접 만들어서 정보와 함께 발생 시키고, except에 예외형식을 명시
try ~ except로 예외 처리하기
try:
# 문제가 없을 경우 실행할 코드
except 예외형식1(발생오류):
# 문제가 생겼을 때 실행할 코드
#ex
my_list =[1,2,3]
try:
print("첨자를 입력하세요")
index = int(input())
print(my_list[index]/0)
except ZeroDivisionError: #index가 0~2로 입력되면 Zero~ 발생
print("0으로 나눌 수 없습니다.")
except IndexError: #index가 0~2 벗어나면 Index~ 발생
print("잘못된 첨자입니다.")
#실행결과
첨자를 입력하세요
2
0으로 나눌 수 없습니다.
첨자를 입력하세요
10
잘못된 첨자입니다.
#ex 예외의 인스턴스를 활용하는 법 : as문 사용
my_list =[1,2,3]
try:
print("첨자를 입력하세요")
index = int(input())
print(my_list[index]/0)
except ZeroDivisionError as err: #as를 붙이고 뒤에 인스턴스명 작성
print("0으로 나눌 수 없습니다.({0})".format(err)) #({0}).format(인스턴스명)
except IndexError as err:
print("잘못된 첨자입니다.({0})".format(err))
#실행결과
첨자를 입력하세요
10
잘못된 첨자입니다.(list index out of range) #이런식으로 세부정보 얻을 수 있음
#finally, else
my_list =[1,2,3]
try:
print("첨자를 입력하세요")
index = int(input())
print("my_list[{0}] : {1}".format(index, my_list[index]))
except Exception as err: #상세보기 위한 ass
print("예외가 발생했습니다 ({0})".format(err))
else: #except에 대한 예외요소 출력
print("리스트의 요소 출력에 성공했습니다.")
finally: #무슨일이 있어도 마무리
print("머선일이 있어도 마무리합니다.")
#실행결과
첨자를 입력하세요
2
my_list[2] : 3
리스트의 요소 출력에 성공했습니다. #except의 예외가 발생했기 때문에 출력(else)
머선일이 있어도 마무리합니다. #finally 때문에 무조건 출력
첨자를 입력하세요
10
예외가 발생했습니다 (list index out of range) #except의 예외가 발생 안함 (try의 예외)
머선일이 있어도 마무리합니다.