====== 예외 처리 ====== * description : 예외 처리 * author : 도봉산핵주먹 * email : hylee@repia.com * lastupdate : 2020-06-25 ===== 예외 처리 ===== ==== 예제 코드 ==== # Section10 # 파이썬 예외처리의 이해 # 예외 종류 # SyntaxError, TypeError, NameError, IndexError, ValueError, KeyError.. # 문법적으로 에러가 없지만 코드 실행 프로세스에서 발생하는 예외 처리 중요 # linter : 코드 스타일, 문법 체크 ############################## ### SyntaxError : 잘못된 문법 ############################## # print('test) # print('Hello')) # if True # pass # a = 20; b = 30; a+ = b # x => y ############################## ### NameError : 참조 변수 없음 ############################## a = 10 b = 15 # print(c) ############################## ### ZeroDivisionError : 0 나누기 에러 ############################## # print(10 / 0) ############################## ### IndexError : 인덱스 범위 오버 ############################## x = [10, 20, 30] # print(x[1]) # print(x[3]) # 예외 발생 # print(x.pop()) # print(x.pop()) # print(x.pop()) # print(x.pop()) # 예외 발생 # print(x.pop(50)) # 예외 발생 ############################## ### KeyError ############################## dic = {'name': 'Kim', 'Age': 33, 'City': 'Seoul'} # print(dic['hobby']) # 키가 존재하지 않으면 예외 # print(dic.get('hobby')) # 안전 # 항상 예외가 발생하지 않을 것으로 가정하고 먼저 코딩 # 그 후 런타임 예외 발생 시 예외처리 권장(EAFP 코딩 스타일) ############################## ### AttributeError : 모듈, 클래스에 있는 잘못된 속성 사용시에 예외 ############################## import time # print(time.time()) # print(time.month()) # 예외 발생 x = [1, 2, 3] # print(x.append(4)) # print(x.add(10)) ############################## ### ValueError : 참조 값이 없을 때 예외 ############################## x = [1, 5, 9] # x.remove(5) # print(x) # x.remove(100) # print(x) # 예외 발생 t = (10, 100, 1000) print(t.index(100)) # print(t.index(7)) # 예외 발생 ############################## ### FileNotFoundError ############################## # f = open('test.txt') # 얘외 발생 ############################## ### TypeError : 자료형에 맞지 않는 연산을 수행 할 경우 ############################## x = [1, 2] y = (1, 2) z = 'test' # print(x + y) # 예외 발생 # print(x + z) # 예외 발생 # print(y + z) # 예외 발생 # print(sum([1,2,3],10,1)) # 예외 발생 # print(x + list(y)) # print(x + list(z) ########################################################## # 예외 처리 기본 # try 에러가 발생 할 가능성이 있는 코드 실행 # except 에러명1: 여러 개 가능(에러 처리) # except 에러명2: # else: try 블록의 에러가 없을 경우 실행 # finally: 항상 실행 ########################################################## # 예제1 name = ['Kim', 'Lee', 'Park'] try: z = 'Kim' # 'Cho' 예외 발생 x = name.index(z) print('{} Found it! {} in name'.format(z, x + 1)) except ValueError: print('Not found it! - Occurred ValueError!') else: print('ok! else!') print() # 예제2 try: z = 'Kim' # 'Cho' 예외 발생 x = name.index(z) print('{} Found it! {} in name'.format(z, x + 1)) except: # 모든 에러를 처리(Exception) print('Not found it! - Occurred ValueError!') else: print('ok! else!') print() # 예제3 try: z = 'Kim' # 'Cho' 예외 발생 x = name.index(z) print('{} Found it! {} in name'.format(z, x + 1)) except Exception as e: print(e) # 에러 내용 출력 # pass # 임시로 에러 해결 시 예외 처리 else: print('ok! else!') finally: print('ok! finally!') # 무조건 수행 됨 print() # 예제4 # 예외처리는 하지 않지만, 무조건 수행 되는 코딩 패턴 try: print('try') finally: print('finally') print() # 예제5 # 예외 발생 : raise # raise 키워드로 예외 직접 발생 try: a = 'Park' if a == 'Kim': print('Ok! pass') else: raise ValueError except ValueError: print('Raise! Occurred ValueError') except Exception: print('Occurred Exception') else: print('ok! else!') ########################################################## # 예외 처리 기본 # try 에러가 발생 할 가능성이 있는 코드 실행 # except 에러명1: 여러 개 가능(에러 처리) # except 에러명2: # else: try 블록의 에러가 없을 경우 실행 # finally: 항상 실행 ########################################################## ==== 실행 콘솔 ==== 1 Kim Found it! 1 in name ok! else! Kim Found it! 1 in name ok! else! Kim Found it! 1 in name ok! else! ok! finally! try finally Raise! Occurred ValueError ===== Tip ===== {{tag>도봉산핵주먹 python 예외처리}}