프로그램을 사용할 때,
예상치 못한 일들이 많이 생긴다.
Exception
1) 예상 가능한 예외 : 입력이 들어가지 않았다던지..
2) 예상 불가능한 예외 : 개발자의 실수, 리스트 인덱스 에러, divide 0 에러 등
프로그램도 제품이기 때문에 잘못된 상황에 대한 대처가 필요함!
try:
#예외 발생 가능 코드
except <Exception Type>:
#예외 발생시 처리 코드
try:
#예외 발생 가능 코드
except ZeroDivisionError:
#예외 발생시 처리 코드
except IndexError as e:
print(e)
except Exception as e:
print(e)
try:
#code
except ZeroDivisionError:
#code
else:
#code
######
try:
#code
except:
#code
finally:
#code
raise <Exception Type>(예외정보)
→ 필요에 의해 강제로 exception을 발생
assert 예외조건
→ 특정 조건에 만족하지 않을 때 예외 발생
File Handling
- 기본적으로 text, binary 파일로 나눔
- 모든 text 파일도 실제는 binary임
- ASCII/Unicode 문자열 집합으로 저장
- 컴퓨터는 text파일을 처리하기 위해 binary 파일로 변환함 (ex: pyc파일)
Binary : 엑셀 , 워드 파일 등..
text : HTML, 파이썬 코드 파일 등…
Python File I/O
f = open("<file name", "mode")
f.close()
mode
r : 읽기모드
w : 쓰기모드
a : 추가모드 (파일의 마지막에 새로운 내용을 추가 시킬 때
f = open("example.txt", "r")
contents = f.read()
print(contents)
f.close()
###
with open("example.txt", "r") as my_files:
contents = f.read()
print(contents)
#with를 쓸 때는 close 안 해도 됨.
###
f = open("log.txt", 'w', encoding="utf8") # 인코딩
f.write("hahaha")
f.close()
import os
os.mkdir("log")
if os.path.exists("abc")
#---------------------------------
import shutil
# 파일을 옮길 때
source = "exam1.txt"
dest = os.path.join("abc", "heyna.txt")
shutil.copy(source, dest)
#----------------------------------
import pathlib
#path를 객체로 봄
#----------------------------------
import pickle
#파이썬의 객체를 영속화하는 built-in 객체,
#데이터 실행 중 정보를 저장함, pickle파일로 저장
f = open("list.pickle", "wb")
test = [1,2,3,4,5]
pickle.dump(test, f)
f.close()
logging
게임핵을 어떻게 잡을 수 있을까?
→ log 남기기!
- 유저 접근, exception, 특정 함수의 사용 등
- 어디에? console, file, DB …
- 시점 : 실행 or 개발(디버깅)
print로만 남기면 console에서만 나오고 사라짐
import logging
logging.basicConfig(level=logging.DEBUG) # 로그 레벨 설정
logging.debug("버그") # 개발시 처리기록
logging.info("확인") # 처리가 진행되는 동안 정보
logging.warning("조심") # 사용자 잘못 입력한 정보나 , 처리는 가능하지만 주의 필요시
logging.error("에러발생") # 에러가 났으나, 프로그램은 동작할 수 있음을 알림
logging.critical("큰일남") # 잘못된 처리로 더이상 프로그램 동작 불가 알림
프로그램 진행 상황에 따라 다른 level의 log출력
DEBUG > INFO > WARNING > ERROR > Critical
기본세팅은 warning임
config file
데이터 파일 위치, 파일 저장 장소, operation type등을 설정해 줄 방법이 필요.
1) configparser
key-value형태로
import configparser
config = configparser.ConfigParser()
config.read('example.cfg')
print(config.sections())
for key in config['SectionTwo']:
value = config['SectionTwo'][key]
print("{0} : {1}".format(key, value)
2) argparser
console창에서 프로그램 실행시 setting정보를 저장함
= command line option
(딥러닝 같은거 쓸 때 셋팅입력)
python —v
add_argument함수를 통해 값 입력함
Uploaded by Notion2Tistory v1.0.0