욤미의 개발일지
[DAY 5] Python: Lecture 12. Setting & Exception & Logging 본문
728x90
반응형
[Lecture 12] Setting & Exception & Logging
Programming Setting
- 실행할 때 마다 필요한 설정 값
- 딥러닝 학습 횟수(epoch), 학습 계수(language rate), gpu 개수
- 한번 설정하면 수정을 잘 안하는 설정 값
- 폴더 위치, 포트
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
반응형
'NLP > STUDY' 카테고리의 다른 글
[DAY 6] Linear Algebra: Lecture 14. 선형대수 기초와 선형 시스템 (0) | 2022.11.11 |
---|---|
[DAY 5] Python: Lecture 13. Web (0) | 2022.11.07 |
[DAY 5] Python: Lecture 11. IO (0) | 2022.11.03 |
[DAY 4] Python: Lecture 10. String (0) | 2022.11.02 |
[DAY 4] Python: Lecture 9. Advanced Data Structure (0) | 2022.10.21 |
Comments