티스토리 뷰

boostcamp AITech

[5일차] 예외 / 파일 / 로그 처리

라이크나우 2021. 1. 22. 20:51

처리의 날

드디어 일주일이 끝났다.

하루하루는 길게 느껴졌는데 일주일을 통틀어 보면 짧았던 것 같다.

특히 복습 블로그 정리가 되게 오래걸렸다... 셋쨋날에는 손가락에 쥐나는 줄 알았음ㅋㅋ...

 

그래도 절대 내일로 미루지 말자고 다짐하며 다 끝내고 자려고 노렸했다 히히. 이번주에 했던 것처럼만 딱 그정도만 남은 7주만 열심히 해보자!

 

Exception Handling

파이썬에도 try except가 있다

try:
    예외 발생 가능 코드
except <Exception Type>:
    예외 발생 시 대응하는 코드

👆구조는 위와 같다.

 

Exception 이름 내용
IndexError List의 Index 범위를 넘어갈 때
NameError 존재하지 않는 변수를 호출 할 때
ZeroDivisionError 0으로 숫자를 나눌 때
ValueError 변환할 수 없는 문자/숫자를 변환할 때
FileNotFoundError 존재하지 않는 파일을 호출할 때

👆파이썬의 빌트인 예외로는 아래 표를 참고하자. 강의자료에 있던 내용인데, 한번 타이핑하면서 외울 겸 표를 새로 작성해보았다.

docs.python.org/3/library/exceptions.html

자세한건 이걸 참고!

 

try:
    예외 발생 가능 코드
except <Exception Type>:
    예외 발생 시 동작하는 코드
else:
    예외가 발생하지 않을 때 동작하는 코드

👆else 구문도 있다.

 

try:
    예외 발생 가능 코드
except <Exception Type>:
    예외 발생 시 동작하는 코드
finally:
    예외 발생 여부와 상관없이 실행됨

👆finally 구문도 있다.

 

while True:
    value = input("변환할 정수 값을 입력해주세요")
    for digit in value:
    	if digit not in "0123456789":
            raise ValueError("숫자값을 입력하지 않으셨습니다")
    print("정수값으로 변환된 숫자 -", int(value))

👆raise구문도 있다. 이거 궁금했는데 잘됐다.

원래대로라면 value가 숫자가 아니어도 오류는 나지 않는다. 그냥 if digit not in "0123456789": <- 이 문장에 걸려서 if 문에 들어갈 뿐이다.

하지만 raise구문을 쓰면 오류를 일으킬 수 있다.

내 기준(프로그램 기준)으로 크리티컬한 오류라 판단될 때 쓰면 되겠다.

 

def get_binary_nmubmer(decimal_number):
    assert isinstance(decimal_number, int)
    return bin(decimal_number)
    
print(get_binary_nmubmer(10))

👆assert문도 살펴보자

 이거 유닛테스트 코드 짤 때 assertTrue 막 이런거 열심히 짰던 기억이 있다. 교수님 잘 지내세요..? 왜 잘 지내세요..

하튼 다르긴 하지만 기능 자체는 비슷하다.

assert 뒤에 나오는 조건에 맞지 않으면 예외를 발생시킨다!

 

File Handling

파일은 두 종류가 있다.

  • Binary 파일
    • 컴퓨터만 이해할 수 있는 형태인 이진형식의 파일
    • 메모장이 해설할 수 없어서 메모장으로 열면 깨져서 보인다.
    • 엑셀파일, 워드 등등
  • Text 파일
    • 인간도 이해할 수 있는 문자열 형식으로 저장된 파일이다
    • 메모장으로도 물론 확인이 가능하다
    • HTML파일, 파이썬 코드 파일 등등이 해당된다.

파일 읽기!

f = open("tired.txt", "r")
contents = f.read()
print(contents)
f.close()

with open("tired.txt", "r") as my_file:
    #1________________________
    contents = my_file.read()
    
    #2________________________
    content_list = my_file.readlines()
    
    #3________________________
    while True:
        line = my_file.readline()
        if not line:
            break

👆파일을 읽는 위의 코드를 살펴보자

#123 은 원래 각각 있어야하는 코드인데 설명을 위해 다 함께 썼다. 오해 말길.

 

일단 첫 네줄은 파일을 열고 읽고 프린트하고 닫는 네줄이다. 명확하니 스킵

 

그 다음 with구문은 close 안하는 사람을 위한 구문같다. with 구문이 끝나면 자동으로 파일이 닫힌다.

  • 파일을 읽어올 때는 read로 전부 읽거나
  • 엔터기준으로 나누는 readlines를 이용해 한번에 list에 넣어주거나,
  • 한줄한줄 읽어주는

세가지 방식이 존재한다. 

 

파일 쓰기!

f = open("count_log.txt", 'w', encoding = "utf8")
for i in range(1,11):
    data = "%d번째 줄입니다. \n" % i
    f.write(data)
f.close()

'w'모드로 파일 open 하면 파일이 생긴다.

이렇게 파일이 생긴다 (빅서로 업데이트하니까 파일들이 되게 둥글둥글 귀여워졌다)

주의 할 점은 f.close()를 하지 않으면 아직 파일이 생성중이라서 문장들이 저장이 안된다!!!(이상 f.close()안쓰고 txt파일 열었다가 아무것도 발견하지 못한 사람으로 부터...)

 

파이썬에서 directory 다루기

os 모듈을 import해서 사용하거나

pathlib 모듈을 이용하기도 한다.

이것들은 쓸 일이 있을 때 찾아보면서 쓰면 될 것 같다.

 

Pickle

파이썬 객체를 영속화(persistence)하는 빌트인 객체라고 한다

객체를 바이너리 형태로 저장해두고 계속 쓰기 위한 목적이다!

 

Logging Handling

아 티스토리 글자 기본색이 살짝 회색이구나 이제 알았네

하튼 로그를 남기고 해결해야 서비스가 잘 유지될 수 있는건 당연하다!

 

  • 프로그램이 실행되는 동안 일어나는 정보를 기록에 남기는 거이다
  • 콘솔 화면에 출력하거나, 파일에 남기거나, DB에 남기거나 방법은 다양하다
  • 기록된 로그는 다양하게 활용 가능하다
  • 실행 시점에 남겨야하는 기록과 개발 시점에 남겨야 하는 로그는 다르니 한번 살펴보자

logging 모듈이 있따. 

import logging

logging.debug("")
logging.info("")
logging.warning("")
logging.error("")
logging.critical("")

이런식으로 사용하면 된다. 

프로그램 진행 상황에 따라 다른 레벨의 로그를 출력해야한다

카페 와이파이 상태가 말이 아니다 공유기 한대만 때려주고싶은데 어디있을까

집에왔다 히힣

하튼

 

 

👆이렇게 로깅이 일어나는 레벨을 지정해줄 수 있다.

setLevel과 basicConfig의 차이는 무엇일까

 

여태까지는 개념적인 거였고 이제 다룰 두가지는 실제 실행할 때 필요한 설정들이다. 두가지 방법이 있다

  • configparser - 파일에서 설정
  • argparser - 실행 시점에 설정

configparser

프로그램의 실행 설정을 file에 저장한다

키벨류 즉 dict 타입으로 저장해두고 사용하면 된다

설정 파일을 딕타입으로 호출 후 사용하면 끝!

 

형식은 이런식이다. 나중에 설정을 할 때 무리 없이 쓸 수 있을 것 같다. 근자감 퐁퐁

 

argparser

콘솔 창에서 프로그램 실행 시 셋팅 정보를 저장한다

ls --help <- 이런 문장에서 --help 가 바로 그 예시이다

Command Line Option이라고도 부른다

이런식으로 설정하면된단다.

 

둘 다 실제로 써보질 않아서 잘 와닿지는 않는다. 나중에 쓰게되면 이 글을 보충하러 오고싶다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함