본문 바로가기

Dev/AI 인공지능

[AI] 파이썬의 예외처리 (Exception Handling) | File Handling | Logging

728x90
반응형

예외 (Exception) : 잘못된 예외 상황

  • 예상이 가능한 예외
    • 발생 여부를 사전에 인지할 수 있는 예외
    • 사용자의 잘못된 입력, 파일 호출 시 파일 없음 등
    • 개발자가 반드시 명시적으로 정의해야 함
  • 예상이 불가능한 예외
    • 인터프리터 과정에서 발생하는 예외 (개발자의 실수)
    • 리스트의 범위를 넘어가는 값 호출, 정수 0으로 나눔
    • 수행 불가 시 인터프리터가 자동 호출

 

 

예외 처리 (Exception Handling) : 잘못된 예외 상황에 대한 대처

  • try~except 문법: if문과 크게 다르지 않지만, except 구문을 더 권장하는 경우도 있음 (예: ZeroDivisinoError)
    • if문 → 로직적인 문제를 다룰때 사용 ~ 라면! 의 경우에 주로 사용
    • exception: 사용자의 입력이나 데이터가 잘못되었을 경우에 주로 사용

 

  • try: 예외가 발생할 수도 있는 코드
  • except: 예외 발생 시 대응하는 코드
  • else: 예외가 발생하지 않을 때 동작하는 코드
  • finally: 예외 발생여부에 상관없이 항상 실행되는 코드
  • raise: 필요에 따라 강제로 Exception을 발생시키는 코드
  • assert: 특정 조건에 만족하지 않을 경우 예외를 발생시키는 코드 (함수 윗부분에 데이터 확인겸 해놓으면 좋음)
try:
	예외 발생 가능 코드
except <Exception Type>:
	예외 발생시 대응하는 코드
    
# Example
a = [1, 2, 3, 4, 5]
for i in range(10):
	try:
    	print(i, 10//i)
        print(a[i])
    except ZeroDivisionError:
    	print("Not Divided by 0")
    except IndexError as e:
    	print(e)
    except Exception as e:  # 전체 exception을 잡는 것은 어디서 에러가 발생했는지 명확하지 않아서 권장하지 않음
    	print(e)

 

File Handling

  • 텍스트 파일 (Text File)
    • 인간도 이해할 수 있는 형태인 문자열 형식으로 저장된 파일
    • 메모장으로 열면 내용 확인 가능
    • HTML 파일, 파이썬 코드 파일, 메모장 저장 파일 등
    • 모든 텍스트파일도 사실상 바이너리 파일임

 

  • 바이너리 파일 (Binary file)
    • 컴퓨터만 이해할 수 있는 이진(법) 형식으로 저장된 파일
    • 일반적인 메모장으로 열면 내용이 깨져 보임 → 보통 어플리케이션에 종속되어 있다고 표현
    • 엑셀파일, 워드 파일 등등 

 

파이썬에서의 파일 처리

  • 파일을 열거나 생성할 때 open() 메서드 사용 - 3가지 모드 (r 읽기, w 쓰기, a 추가) → 파일 주소 지정
  • 상대경로를 참조하여 파일 위치를 입력하고, read()로 파일 읽기 → 실제로 파일을 읽는 단계
  • with 구문과 함께 사용하면 구문이 끝날 때 파일을 열고 사용하느라 사용된 메모리가 자동으로 닫힘
  • readlines(): 한번에 파일을 전체를 읽어오기
  • readline(): 실행 시 마다 한줄씩 읽어오기 → 처리용량이 너무 커서 한번에 메모리에 올릴 수 없는 경우

 

이 외에도 os, shutil, pathlib 라이브러리를 사용하여 다양한 File Handling이 가능함
파일 경로를 다룰 때에도, 문자열보다는 위 라이브러리들의 메소드를 사용하는 것이 더 안전! 



Pickle

  • 파이썬의 객체를 영속화(persistence)하는 built-in 객체
  • 데이터, object 등 실행 중인 정보를 저장 → 불러와서 사용
  • 저장해야하는 정보, 계산 결과(모델) 등 활용이 많음

 

 

Logging - 로그 남기기

  • 프로그램이 실행되는 동안 일어나는 정보를 기록으로 남기기
  • 어떤 것을 기록할 것인가? 유저의 접근, 프로그램의 exception, 특정 함수의 사용 등
  • 어디에 남길것인가? console 화면에 출력, 파일에 남기기, DB에 남기기
  • 기록된 로그를 분석하여 의미있는 결과를 도출할 수 있음
  • 실행시점에서 남겨야 하는 기록 (유저 분석을 위함)
  • 개발시점에서 남겨야 하는 기록 (디버깅을 하기 위함)
  • logging 모듈: 파이썬의 기본 log 관리 모듈

 

Logging Level

  • debug: 개발 시 처리 기록을 남겨야하는 로그 정보를 남김
  • info: 처리가 진행되는 동안의 정보를 알림
  • warning: 사용자가 잘못 입력한 정보나 처리는 가능하나 원래 개발시 의도치 않는 정보가 들어왔을 때 알림 (기본적으로 이 warning 단계부터 알려줌 - 필요 세팅값 조정 가능)
  • error: 잘못된 처리로 인해 에러가 났으나, 프로그램은 동작할 수 있을 때
  • critical: 잘못된 처리로 데이터 손실이나 더이상 프로그램이 동작할 수 없음을 알림

 

 

Logging을 위한 Setting (데이터 파일 위치/ 파일 저장장소 / Operation Type 등)

  • Configparser: 파일에 설정 정보 저장 및 입력
    • 프로그램의 실행 설정을 file에 저장
    • Section, Key, Value 값의 형태로 설정된 설정 파일을 사용
    • 설정 파일을 Dict Type으로 호출 후 사용
    • configparser 모듈을 사용하여 설정값 파일을 호출 및 메모리에 객체 상태로 저장 
  • ArgParser: 콘솔창에서 세팅 설정 정보를 저장
    • Console 창에서 프로그램 실행 시 Setting 정보를 저장
    • 거의 모든 console 기반 파이썬 프로그램 기본으로 제공
    • 특수 모듈도 많이 존재하지만(TF), 일반적으로 argparse 사용
    • Command-lind Option이라고 부름
    • argparse 모듈을 사용
    • 옵션들을 저장해놓은 다음 실험할 때 사용하기도 함

 

 

본 포스트는 부트코스 내 네이버 부스트캠프 AI Tech 5기 강의를 토대로 작성되었습니다

 

 

728x90
반응형