ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] File / Exception / Log
    Programming/Python 2023. 8. 29. 21:56

     

     

     

     

    프로그램을 사용할 때,

    예상치 못한 일들이 많이 생긴다.

     

    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함수를 통해 값 입력함

     

     

     

     

     

     

     

    출처

    네이버 프리코스 강의

    댓글

Designed by Tistory.