[요약] 파이썬(Python) - 예외처리(Exception)
발생 가능한 예외의 종류
문법적 오류 (SyntaxError):
통합 IDE를 사용한다면 linter가 Detect해 줌
linter : 문법 코드 스타일, 문법 체크, microsoft Code 자체가 Python의 linter 역할을 함(문법 체크)
런타임 오류(RuntimeError) :
NameError : 참조변수 에러
ZeroDivisionError : 0 나누기 에러
IndexError : 인덱스 범위를 벗어남
- IndexError: list index out of range
KeyError: 'hobby'
AttributeError : 모듈, 클래스에 있는 잘못된 속성 호출시
- AttributeError: module 'time' has no attribute 'month'
ValueError : 참조값이 없는 경우
- ValueError: list.remove(x): x not in list
FileNotFoundError : 지정된 파일을 찾지 못하는 경우
- FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
TypeError : 형변환 에러
- TypeError: can only concatenate list (not "tuple") to list
예외처리 구문
try # 에러가 발생할 가능성이 있는 코드 실행
except ZeroDivisionError :
except IndexError :
except : 기타 오류 발생시 캐치
else : 예외가 발생하지 않았을 경우 실행
finally : 예외가 발생하던 안하던 항상 실행
예외처리 사례 코드)
# 파이썬(Python) 예외처리 # 예외 종류 # 문법적으로는 오류가 없지만 코드 실행(런타임)시에 프로세스에서 발생하는 예외 처리가 중요함 # linter : 문법 코드 스타일, 문법 체크, microsoft Code 자체가 Python의 linter 역할을 함(문법 체크) # # SyntaxError : 잘못된 문법 # 예) print('Test) if True pass x => y # NameError : 참조변수 에러 a = 10 b = 20 print(c) # --> NameError 발생 # ZeroDivisionError : 0 나누기 에러 print(10 / 0) # IndexError : 인덱스 범위를 벗어남 x = [10, 20, 30] print(x[0]) # 정상 print(x[3]) # IndexError: list index out of range # KeyError dic = {'name' : 'Kim', 'Age' : 33, 'City' : 'Seoul'} print(dic['hobby']) # KeyError: 'hobby' print(dic.get('hobby')) # None # AttributeError : 모듈, 클래스에 있는 잘못된 속성 호출시 import time print(time.time()) print(time.month()) # AttributeError: module 'time' has no attribute 'month' # ValueError : 참조값이 없는 경우 x = [1,5, 9] x.remove(10) # ValueError: list.remove(x): x not in list x.index(10) # ValueError: 10 is not in list # FileNotFoundError f = open('test.txt', 'r') # FileNotFoundError: [Errno 2] No such file or directory: 'test.txt' # TypeError x = [1, 2] y = (1, 2) z = 'test' print(x+y) # TypeError: can only concatenate list (not "tuple") to list print (x + list(y)) # 정상 - 형변환에 의한, [1, 2, 1, 2] # 예외가 발생하지 않을거라 가정하고 코딩 후 # 런타임 예외 발생가능한 부분에 대한 예외 처리 코딩 추가(EAFP 코딩 스타일) # EAFP : 일단 만들고 오류 발생 가능한 부분에 예외 처리를 하는 방식의 코딩 # 예외처리 기본 # try : 에러가 발생할 가능성이 있는 코드 실행 # except : 에러1이 발생할 경우 캐치 # except : 에러2가 발생할 경우 캐치 # else : 에러가 발생하지 않았을 경우 실행 # finally : 항상 실행 #예1) name = ['Kim', 'Park', 'Choi'] try: z = 'Lee' x = name.index(z) print('{} found it! in name'. format(z, x+1)) except ValueError: # 캐치할 에러 지정 (AttributeError, ZeroDivisionError, NameError ... ) print('not found it! - Occured ValueError') else: print('OK! else!') # except: 또는 except Exception: 로 두면 모든 오류를 캐치하게됨. #예2) try: z = 'Lee' x = name.index(z) print('{} found it! in name'. format(z, x+1)) except: print('not found it! - Error') else: print('OK! else!') finally: print('finally OK!') # 예3) # 예외처리는 하지 않지만, 무조건 수행되는 코딩 패턴 try: print('Try') finally: print('OK finally') # 예제4) try: z = 'Lee' x = name.index(z) print('{} found it! in name'. format(z, x+1)) except ValueError: print('Occured ValueError') except NameError : print('Occured NameError') except IndexError: print('Occured IndexError') except Exception: print('Occured Other...') else: print('OK else') finally: print('finally OK!') # 예5) # 강제 예외발생 raise # raise 키워드로 예외 직접 발생 try: a = 'Kim' if a=='Lee': print('Ok 허가') else: raise ValueError except ValueError: print('문제발생') except Exception as f: print(f) else: print('OK!')
'프로그래밍 > Python' 카테고리의 다른 글
[요약] 파이썬(Python) SQLite DB 연동 (0) | 2020.12.07 |
---|---|
[요약] 파이썬(Python) - 엑셀(Excel)/CSV 파일 읽기 쓰기 (0) | 2020.12.06 |
[요약] 파이썬(Python) - 파일 읽기 / 쓰기 (0) | 2020.11.30 |
[요약] 파이썬(Python) - 모듈과 패키지 개념 이해 (0) | 2020.11.29 |
[요약] 파이썬(Python) - 클래스(Class) 사용법 (0) | 2020.11.23 |