File, Except, Log Handling.html
for i in range(10):
try:
print(10/i)
except ZeroDivisionError:
print("Not divided by 0")
for i in range(10):
try:
result = 10/i
except ZeroDivisionError:
print("Not divided by 0")
else:
print(10/i)
try:
for i in range(1,10):
result = 10//i
print(result)
except ZeroDivisionError:
print("Not divided by 0")
finally:
print("종료되었습니다")
raise (예외정보)
while True:
value = input("변환할 정수값을 입력해주세요")
for digit in value:
if digit not in "0123456789":
raise ValueError("숫자값을 입력하지 않으셨습니다.")
print("정수값으로 변환된 숫자 -", int(value))
assert 예외조건
def get_binary_number(decimal_number : int):
assert isinstance(decimal_number, int)
return bin(decimal_number)
print(get_binary_number(10.0))
파일의 종류
Binary파일
Text 파일
f = open("<파일이름>", "접근 모드")
f.close()
f = open("ddd.txt","r")
contents = f.read()
print(contents)
f.close()
with open("ddd.txt","r") as my_file:
contents = my_file.read()
print(type(contents), contents)
# 실행 시 마다 한 줄 씩 읽어오기
with open("ddd.txt","r") as my_file:
i = 0
while True:
line = my_file.readline()
if not line:
break
print(str(i) + " === " + line.replace("\n",""))
i = i + 1
문자나 글자를 컴퓨터에 어떤 방식으로 저장할지에 대한 표준 설정을 encoding이라 한다.
윈도우에서는 'cp949'라는 포맷을 사용하기 때문에, encoding을 'utf-8'로 바꿔서 저장하면 편리하다.
# file open
f = open("example text2","w",encoding="utf8")
for i in range(1,11):
data = "{0}번째 줄입니다. \n".format(i)
f.write(data)
f.close()
폴더 생성
# 'log'라는 이름의 폴더 생성
import os
os.mkdir("log")
파일 이동 및 복사
shutil.copy() : 파일 복사 함수
import shutil
source = "example text.txt"
dest = os.path.join("log","source.txt")
shutil.copy(source,dest)
최근에는 pathlib 모듈을 사용하여 path를 객체로 다룸
1) 디렉토리가 있는지 확인
2) 파일이 있는지 확인
import os
# Directory가 존재하는지 확인하고, 존재하지 않으면 생성
if not os.path.isdir("log"):
os.mkdir("log")
# 파일이 있는지 확인하고, 없다면 새로 생성
if not os.path.exists("log/count_log.txt"):
f = open("log/count_log.txt","w",encoding="utf8")
f.write("기록이 시작됩니다\n")
f.close()
# 여러 정보 기록
with open("log/count_log.txt","a", encoding="utf8") as f:
import random, datetime
for i in range(1,11):
stamp = str(datetime.datetime.now())
value = random.random() * 100000
log_line = stamp + '\t' + str(value) + "값이 생성되었습니다." + '\n'
f.write(log_line)
파이썬의 객체를 영속화(persistence)하는 built-in 객체
데이터, object 등 실행중 정보를 저장 → 불러와서 사용
저장해야하는 정보, 계산 결과(모델)등 활용이 많음
파이썬에 특화된 binary file
# pickle
import pickle
f = open("list.pickle", "wb")
test = [1,2,3,4,5]
pickle.dump(test,f)
f.close()
f = open("list.pickle","rb")
test_pickle = pickle.load(f)
print(test_pickle)
f.close()
프로그램이 실행되는 동안 일어나는 정보를 기록으로 남기기
유저의 접근, 프로그램의 Exception, 특정 함수의 사용
Console 화면에 출력, 파일에 남기기, DB에 남기기 등등
기록된 로그를 분석하여 의미있는 결과를 도출 할 수 있음
실행시점에서 남겨야 하는 기록, 개발시점에서 남겨야하는 기록
print vs logging
logging level
프로그램 진행 상황에 따라 다른 Level의 Log를 출력함
개발 시점, 운영 시점마다 다른 Log가 남을 수 있도록 지원함
DEBUG > INFO > WARNING > ERROR > Critical
Log 관리시 가장 기본이 되는 설정 정보
import logging
logger = logging.getLogger("main") # Logger 선언
logging.basicConfig(level=logging.DEBUG)
logger.setLevel(logging.INFO)
stream_hander = logging.FileHandler("my.log",mode="w",encoding="utf8") # Logger의 output 방법 선언
logger.addHandler(stream_hander) # Logger의 output 등록
logger.debug("틀렸잖아!")
logger.info("확인해")
logger.warning("조심해!")
logger.error("에러났어!!")
logger.critical("망했다....")
configparser
argparser