Day_2 05. File / Exception / Log Handling
작성일
File / Exception / Log Handling
1. Exception
1.1 예상 가능한 예외
- 발생 여부를 사전에 인지할 수 있는 예외
1.2 예상 불가능한 예외
- 인터프리터 과정에서 발생하는 예외, 개발자 실수
1.3 예외 처리
- 예외가 발생할 경우 후속 조치 등 대처 필요
- if 문 or Exception 발생
2. Exception Handling
- try ~ except 문법
try:
예외 발생 가능 코드
except <Exception Type>:
예외 발생시 대응하는 코드
-
try ~ except ~ else
-
try ~ except ~ finally
- raise 구문
- 필요에 따라 강제로 Exception을 발생
- raise
(예외정보)
- assert 구문
- 특정 조건에 만족하지 않을 경우 예외 발생
- assert 예외조건
3. File Handling
3.1 파일의 종류
- 기본적인 파일 종류로 text파일과 binary파일로 나눔
- 컴퓨터는 text파일을 처리하기 위해 binary 파일로 변환시킴
-
모든 text파일도 실제는 binary파일 ASCII/Unicode 문자열 집합으로 저장되어 사람이 읽을 수 있음
- Text 파일은 인간도 이해할 수 있는 형태인 문자열 형식
- Binary 파일은 컴퓨터만 이해할 수 있는 형태인 이진(법)형식
3.2 Python File I/O
- 파이썬은 파일 처리를 위해 ‘open’ 키워드를 사용
f = open("<파일이름>", "접근 모드")
f.close
-
접근모드 : ‘r’, ‘w’, ‘a’
-
with 구문
with open('i_have_a_dream.txt', 'r') as my_file:
contents = my_file.read()
print(type(contents), contents)
3.3 파이썬의 File Read
- readlines() : 한 줄씩 읽어 list Type으로 반환함
- readline() : 실행 시 마다 한 줄 씩 읽어 오기
3.4 파이썬의 File Write
- mode 는 “w”, encoding=”utf8”
- mode 는 “a” 는 추가모드
3.5 파이썬의 directory 다루기
- os 모듈을 사용하여 Directory 다루기
import os
os.mkdir('log')
- 디렉토리가 있는지 확인하기
if not os.path.isdir('log'): os.mkdir('log')
- 경로 합치기
os.path.join('abc', 'raki.txt')
- 최근에는 pathlib 모듈을 사용하여 path를 객체로 다룸
import pathlib
cwd = pathlib.Path.cwd() # 현재 디렉토리
cwd.parent # 부모 디렉토리
cwd.parent.parent # 부모의 부모 디렉토리
3.6 Pickle
- 파이썬의 객체를 영속화(persistence)하는 built-in 객체
- 데이터, object 등 실행중 정보를 저장 -> 불러와서 사용
- 저장해야하는 정보, 계산 결과(모델) 등 활용이 많음
with open(<파일이름>, 'wb') as f:
pickle.dump(file, f)
with open(<파일이름>, 'rb') as f:
file = pickle.load(f)
4. Log Handling
4.1 로그 남기기 - Logging
- 프로그램이 실행되는 동안 일어나는 정보를 기록을 남기기
- 유저의 접근, 프로그램의 Exception, 특정 함수의 사용
- Console 화면에 출력, 파일에 남기기, DB에 남기기 등등
- 기록된 로그를 분석하여 의미있는 결과를 도출 할 수 있음
-
실행시점에서 남겨야 하는 기록, 개발시점에서 남겨야하는 기록
- 기록을 print로 남기는 것도 가능하다
- 그러나 Console 창에만 남기는 기록은 분석시 사용불가
4.2 loggin 모듈
- Python의 기본 Log 관리 모듈
import logging
logging.debug("틀렸잖아!")
logging.info("확인해!")
logging.warning("조심해!")
logging.error("에러났어!")
logging.critical("망했다...")
- logging level
-
DEBUG > INFO > WARNING > ERROR > Critical
- debug : 개발시 처리 기록을 남겨야하는 로그 정보를 남김
- info : 처리가 진행되는 동안의 정보를 알림
- warning : 사용자가 잘못 입력한 정보나 처리는 가능하나 원래 개발시 의도치 않는 정보가 들어왔을때 알림
- error : 잘못된 처리로 인해 에러가 났으나, 프로그램은 동작할 수 있음을 알림
- critical : 잘못된 처리로 데이터 손실이나 더이상 프로그램이 동작할 수 없음을 알림
-
- configparser
- 프로그램의 실행 설정을 file에 저장함
- Section, Key, Value 값의 형태로 설정된 설정 파일을 사용
- 설정파일을 Dict Type으로 호출후 사용
- argparser
- Console 창에서 프로그램 실행시 Setting 정보를 저장함
- 거의 모든 Console 기반 Python 프로그램 기본으로 제공
- 특수 모듈도 많이 존재하지만(TF), 일반적으로 argparse를 사용
-
Command-Line Option 이라고 부름
- 커맨드라인 옵션이라고도 부름
댓글남기기