Exception
예외에는 예상 가능한 예외와 예상이 불가능한 예외로 나눌 수 있다.
예상 가능한 예외
예상 가능한 예외는 말 그대로 발생여부를 사전에 인지할 수 있는 예외를 의미한다. 이때 개발자가 반드시 명시적으로 정의해야한다.
예상 불가능한 예외
개발자의 실수로 인해 인터프리터 과정에서 발생하는 예외를 예상 불가능한 예외라고 한다.
Exception Handling(예외처리)
예외가 발생할 경우 후속 조치 등 대처 또는 처리를 해야한다는 의미이다.
try ~ except
#try:
# 예외 발생 가능 코드
#except <Exception Type>:
# 예외 발생시 대응하는 코드
for i in range(10):
try:
print(10 / i)
except ZeroDivisionError:
print("Notdividedby0")
try ~ except ~ else
#try:
# 예외 발생 가능 코드
#except <Exception Type>:
# 예외 발생시 동작하는 코드
#else:
# 예외가 발생하지 않을 떄 동작하는 코드
for i in range(10):
try:
result = 10/i
except ZeroDivisionError:
print("Notdividedby0")
else:
print(10 / i)
try ~ except ~ finally
#try:
# 예외 발생 가능 코드
#except <Exception Type>:
# 예외 발생시 동작하는 코드
#inally:
# 예외 발생 여부와 상관없이 실행됨
try:
for i in range(10):
result = 10/i
print(result)
except ZeroDivisionError:
print("Notdividedby0")
finally:
print('종료되었습니다')
Built-in Exception
기본적으로 제공하는 예외는 다음과 같이 있다.
raise
필요에 따라 강제로 Exception을 발생한다.
#raise <ExceptionType>(예외정보)
while True:
value = input("숫자입력:")
for digit not in "0123456789":
raise ValueError("숫자 입력 안됨")
assert
특정 조건에 만족하지 않을 경우 예외 발생
#assert 예외 조건
def get_number(num):
assert isinstance(num, int)
return bin(num)
print(get_number(10))
File Handling
파일 시스텐은 OS에서 파일을 저장하는 트리구조 저장 체계이다.
open
파이썬은 파일 처리를 위해 'open'키워드를 사용한다.
f = open("<파일명>", "접근 모드")
f.close()
파일열기 모드로는 다음과 같이 세 가지가 있다.
- r : 읽기모드
- w : 쓰기모드
- a : 추가모드
read
read()를 사용하여 txt파일 안에 있는 내용을 문자열로 반환할 수 있다.
f= open("test.txt","r")
contents = f.read()
print(contents)
f.close()
with 구문
with 구문을 함께 사용하면 파일을 사용후 자동으로 close가 된다.
with open("test.txt", "r") as f:
contents = f.read()
print(contents)
readline
실행시마다 한 줄씩 읽어올 수 있다.
with open("test.txt", "r") as f:
while True:
line = f.readline()
if not line:
break
print(line)
write, add
write는 다음과 같이 모드를 w로 설정하고 인코딩 방식도 정할 수 있다.
f = open("test.txt, 'w', encoding='utf8')
f.write("추가")
f.close()
add는 다음과 같이 모드를 a로 설정하면 된다.
with open("test.txt", "r") as f:
f.write("추가")
directory
mkdir을 사용하여 디렉토리를 생성할 수 있다.
import os
os.mkdir('log')
isdir는 해당 디렉토리가 있는지 확인할 수 있다.
import os
if not os.path.isdir('log'):
os.mkdir('log')
최근에는 pathlib 모듈을 사용하여 path를 객체로 다룬다고 한다. 다른 것으로 shutil도 사용한다고 한다.
import pathlib
cwd = pathlib.Path.cwd()
Log 파일 생성
import os
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 oprn('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() * 1000000
log_line = stamp + '\t' + str(value) + '생성됨\n'
f.write(log_line)
Pickle
pickle은 파이썬의 객체를 영속화(persistence)라는 built-in 객체이다. 데이터, object 등 실행 중 정보를 저장하여 불러와서 사용할 수 있다. 쉽게 말해 객체는 파이썬을 실행하면 메모리가 올라가고 종료되면 사라지는데 이 객체를 사라지게 하지 않고 저장한다는 것이다.
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.load(f)
print(test)
f.close()
Logging
로깅은 프로그램이 실행되는 동안 일어나는 정보를 기록으로 남기는 것을 말한다. 이렇게 기록된 로그를 분석하여 의미있는 결과를 도출할 수도 있다. 기록은 print로도도 할 수 있지만 console 창에만 남기는 기록은 분석시 사용불가하다.
logging
python의 기본 log 관리 모듈로 logging이 있고 다음과 같이 사용할 수 있다.
import logging
logging.debug("not")
logging.info("check")
logging.warning("careful")
logging.error("error")
logging.critical("mess")
logging level
프로그램 진행 상황에 따라 다른 level의 log를 출력해야한다. 진행 상황에 따른 순서는 DEBUG > INFO > WARNING > ERROR > Critical 라고 할 수 있다. 기본적으로는 warning lovel로 설정되어있다.
- debug : 개발시 처리 기록을 남겨야하는 로그 정보를 남김
- info : 처리가 진행되는 동안의 정보를 알림
- warning : 사용자가 잘못 입력한 정보나 처리는 가능하나 원래 개발시 의도치 않는 정보가 들어왔을때 알림
- error : 잘못된 처리로 인해 에러가 났으나, 프로그램은 동작할 수 있음을 알림
- critical : 잘못된 처리로 데이터 손실이나 더 이상 프로그램이 동작할 수 없음을 알림
import logging
logger = logging.getLogger("main")
logging.basicConfig(level=logging.DEBUG) #3.8 이상 버전부터 기본 레벨을 설정을 해주어야한다.
logging.setLevel(logging.INFO)
# 다음과 같이 파일에 기록할 수 있다.
steam_handler = logging.FileHandler('my.log', mode='w', encoding='utf8')
logger.addHandler(steam_handler)
logging.debug("not")
logging.info("check")
logging.warning("careful")
logging.error("error")
logging.critical("mess")
configparser
프로그램의 실행 설정을 file에 section, key, value 값의 형태로 저장해 나중에 dict type으로 호출 후 사용할 수 있다. config 파일은 다음과 같이 작성할 수 있다.
[SectionOne]
Status: Single
Name: Derek
Value: Yes
Age: 30
Single: True
[SectionTwo]
FavoriteColor = Green
[SectionThree]
FamilyName : Johnson
그 다음 configparser를 통해 다음과 같이 사용할 수 있다.
import configparser
config = configparser.ConfigParser()
config.sections()
config.read('example.cfg')
config.sections()
for key in config['SectionOne']:
print(key)
config['SectionOne']["status"]
argparser
Console 창에서 프로그램 실행이 setting 정보를 저장할 수 있다. 거의 모든 Conole 기반 python 프로그램에 기본으로 제공되고 있다. 또한 Command-Line Option이라고도 부른다.
import argparse
parser = argparse.ArgumentParser(description='Sum two integers.')
#순서대로 짧은 이름 > 긴 이름 > 표시명 > Help 설명 > argument type으로 작성한다.
parser.add_argument('-a', "--a_value", dest=”A_value", help="A integers", type=int)
parser.add_argument('-b', "--b_value", dest=”B_value", help="B integers", type=int)
args=parser.parse_args()
print(args)
print(args.a)
print(args.b)
print(args.a+args.b)
logging formmater
다음과 같이 log의 결과값의 format을 지정해줄 수 있다.
formatter = logging.Formatter('%(asctime)s %(levelname)s %(process)d %(message)s')
log config file
이처럼 config 파일을 불러올 수도 있다.
logging.config.fileConfig('logging.conf')
logger =logging.getLogger()
'Boostcamp AI Tech' 카테고리의 다른 글
[Boostcamp 과제 - 5] morsecode (0) | 2021.08.06 |
---|---|
[Boostcamp 과제 - 4] Baseball (0) | 2021.08.06 |
[Boostcamp Day-4] Python - Module and Project (0) | 2021.08.05 |
[Boostcamp Day-4] Python - Object Oriented Programming (0) | 2021.08.05 |
[Boostcamp Day-4] Python - Pythonic code (0) | 2021.08.05 |