[Python]예외처리(try/except)
파이썬의 예외처리에 대해 알아보자.
# 파이썬 예외처리 # 예외 종류 # SyntaxError, TypeError, NameError, IndexError, ValueError, KeyError... # SyntaxError : 문법오류 # print('error) <- 따옴표 누락 # NameError : 참조 없음 # a = 10 # b = 15 # print(c) <-- 정의되지 않은 변수 참조 # ZeroDivisionError # print(100 / 0) # IndexError # x = [50, 10, 30] # print(x[5]) # x.pop() # x.pop() # x.pop() # x.pop() <-- 더 이상 뺄 수 없다. # KeyError # dic = {'name': 'jigi', 'age': 10} # print(dic['birth']) <-- 없는 속성(키)으로 접근 # 예외가 없는 것을 가정하고 개발 -> 런타임 예외발생 시 예외처리 권장(EAFP) # AttributeError : 모듈, 클래스에 있는 잘못된 속성사용 예외 # import time # print(time.time2()) <-- time2()라는 메서드는 존재하지 않음 # ValueError # x = [10, 100, 200] # x.remove(50) <-- 존재하지 않은 값(value)를 삭제하려고 함 # FileNotFoundError # f = open('test.txt') <-- test.txt 라는 파일이 존재하지 않아서 발생하는 오류 # TypeError : 자료형에 맞지 않는 연산을 수행하는 경우 발생 # x = [1, 2] # y = (1, 2) # z = 'text' # print(x + y) <- 자료형이 서로 달라 오류발생 # print(x + z) <- 자료형이 서로 달라 오류발생 # print(y + z) <- 자료형이 서로 달라 오류발생 # 예외처리 기본 # try : 에러가 발생할 가능성이 있는 코드 # except 에러명1: 예외가 발생할 때 처리할 블록, 여러개 선언가능 # else : try 블록의 에러가 없을 경우 수행 # finally : 항상 처리해야할 블록 name = ['jigi', 'best', 'creative'] # 예제1 try: z = 'jigi' x = name.index(z) print('Found it! {} in name'.format(z, x + 1)) except ValueError: print('Not found it') else: print('OK') print('Continue next Line') # 예제2 try: z = 'jigi' x = name.index(z) print('Found it! {} in name'.format(z, x + 1)) except Exception: # 모든 예외를 잡음 (Exception은 생략가능) print('Not found it') else: print('OK') print('Continue next Line') # 예제3 try: z = 'jigi' x = name.index(z) print('Found it! {} in name'.format(z, x + 1)) except Exception as e: # 모든 예외를 잡음 (Exception은 생략가능) print(e) print('Not found it') else: print('OK') finally: print('Allways execute!!') print('Continue next Line') # 예제4 : 예외를 강제로 발생시킴(raise) try: a = 'jigi' if a == 'jigi': print('Pass') else: print('Not allow') raise ValueError except ValueError: print('Catch ValueError!!') else: print("OK") print('Continue next Line')
결과:
Found it! jigi in name OK Found it! jigi in name OK Found it! jigi in name OK Allways execute!! Pass OK
최신 댓글