욤미의 개발일지

[DAY 5] Python: Lecture 12. Setting & Exception & Logging 본문

NLP/STUDY

[DAY 5] Python: Lecture 12. Setting & Exception & Logging

욤미 2022. 11. 6. 18:08
728x90
반응형

[Lecture 12] Setting & Exception & Logging

Programming Setting

  • 실행할 때 마다 필요한 설정 값
    • 딥러닝 학습 횟수(epoch), 학습 계수(language rate), gpu 개수
    → Command Line Argument(명령행 인자)로 입력하면 편리함
  • 한번 설정하면 수정을 잘 안하는 설정 값
    • 폴더 위치, 포트
    → 설정 파일에서 불러들이기(YAML, ConfigParser)

Command Line Argument

  • 콘솔 창에서 프로그램 실행 시 프로그램에 넘겨주는 인자 값
  • Command-line Interface(CLI)에서 흔히 쓰는 방식
  • 공백 기준으로 분리되며 문자열 형태로 전달
  • import sys, sys.argv로 접근 가능

argparser

  • Command Line Argument보다 쉽게 관리하기 위한 방법
  • 인자 flag를 설정하여 flag별 입력 가능(긴 flag, 짧은 flag 활용)
  • 기본값 설정 가능
  • Type 설정 가능(문자열에서 변환)
  • Help 제공하여 사용자 편의 향상
  • 이 외 명령 줄 인자와 관련된 여러 도구 포함
import argparse

parser = argparse.ArgumentParser()
# parser.add_argument(짧은 flag, 긴 flag)
parser.add_argument('-l', '--left', type=int) # 타입 설정
parser.add_argument('-r', '--right', type=int) 
parser.add_argument('--operation',
			dest = 'op', # 타겟 속성, args.op로 접근 가능
			help = 'Set Operation', # 인자 설명
			default = 'sum') # 기본값
args = parser.parse_args()

Exception Handling

  • 프로그램 실행 중에는 다양한 예외/에러가 발생한다.
  • 에러가 발할 경우 대응 조치가 필요
    • 불러올 파일이 없을 때 사용자에게 알림
    • 서버와 연결이 끊기면 다른 서버로 redirection
  • 예외가 발생할 수 있는 코드 → 특정 예외 발생시 대응코드 실행 → 계속 진행
try:
	예외 발생 가능 코드
except 예외 클래스:
	대응 코드

Built-in Exceptions(내장 예외): 기본 정의된 예외 클래스

예외 클래스 설명
IndexError List의 Index 범위를 넘어감
NameError 존재하지 않는 변수를 호출
ZeroDivisionError 0으로 숫자를 나눔
ValueError 변환할 수 없는 문자열/숫자를 변환
FileNotFoundError 존재하지 않는 파일 호출

Exception Class

  • 파이썬 예외는 모두 BaseException 상속
  • 대부분 try로 최대 Exception단 까지만 잡음
  • Exception class를 상속하여 새로운 예외 생성 가능

Raising & Referencing Exceptions

  • raise <예외 객체> Raise 구문으로 의도적으로 예외 발생
  • except <예외 클래스> as <예외 객체> As 구문으로 잡힌 에러 참조 가능

Assertion

  • assert <조건> / aseert <조건>,<에러 메시지>조건을 확인하여 참이 아니면 AssertError 발생

Post-error Processing

Logging

  • 프로그램이 실행되는 동안 발생했던 정보를 기록
    • 결과 처리, 유저 접근, 예외 발생 등
    • 기록된 로그 분석을 통한 디버깅 & 유저 패턴 파악
  • 기록 용도에 따라 출력 형식 및 필터링 필요
  • stderr나 파일출력이 아닌 체계적인 로깅 → Logging Module

Logging Module

  • 파이썬 기본 Logging 모듈
  • 상황에 따라 다른 level의 로그 출력
  • DEBUG < INFO < WARNING < ERROR < Critical
import logging

logging.debug("디버깅")
logging.info("정보 확인")
logging.warning("경고")
logging.error("에러")
logging.critical("치명적 오류")
level 설명 예시
DEBUG • 상세한 정보, 보통 문제를 진단할 때만 사용 • 변수 A에 값 대입
• 함수 F 호출
INFO • 상태 모니터링이나 결함 조사
• 프로그램 정상 작동 중에 발생하는 이벤트 보고
• 서버 시작
• 사용자 User가 서버 접속
WARNING • 예상치 못한 일이 발생하거나 가까운 미래에 발생할 문제에 대한 경고
• 대처할 수 있는 상황이지만 이벤트 주목 필요
• 문자열 입력 대신 숫자 입력→ 문자로 변환 뒤 진행
• 인자로 들어온 리스트 길이가 안 맞음→ 적당히 잘라 사용
ERROR • 오류가 발생하였으나 프로그램은 동작 가능
• 프로그램 일부 기능을 수행하지 못함
• 파일을 읽으려니 파일이 없음→ 사용자에게 알림
• 외부 서버와 연결이 불가능→ 사용자에게 대체 서버 요청
CRITICAL • 심각한 오류 발생
• 프로그램 자체가 계속 실행되지 않을 수 있음
• 중요 파일이 없음
• 중요 파일이 없음
• 사용자가 강제 종료

 

 

Root Logging

  • 기본 설정된 로깅, 표준 에러 출력, warning 이상 출력
  • logging.basicConfig 로 간단하게 설정가능
    • 로그를 기록할 파일 이름
    • 로그 레벨을 설정하여 특정 레벨 이상 출력
  • logging.getLogger 로 새로운 이름의 Logger 생성
    • 이름이 같은 Logger가 존재하면 해당 객체를 가져옴
    • 따로 설정 되어 있지 않으면 Root의 설정을 상속함
728x90
반응형
Comments