01 Exception Handling
01-1 Exception
- 예상 가능한 예외와 예상 불가능한 예외
- 예상 가능한 예외
- 발생 여부를 사전에 인지할 수 있는 예외
- ex. 사용자의 잘못된 입력,
- → 개발자가 반드시 명시적으로 정의해야 함
- 발생 여부를 사전에 인지할 수 있는 예외
- 예상 불가능한 예외
- 인터프리팅 과정에서 발생하는 예외
- 예상 가능한 예외
- 예외 처리 Exception Handling
- 프로그램은 제품이므로, 모든 잘못된 상황에 대한 대처가 필요
- exception의 종류
- Built-in Exception 예시
Exception 이름 내용 IndexError list의 index 범위를 넘어갈 때 NameError 존재하지 않는 변수를 호출할 때 ZeroDivisionError 0으로 숫자를 나눌 때 ValueError 변환할 수 없는 문자/숫자를 변환할 때 FileNotFoundError 존재하지 않는 파일을 호출할 때
- Built-in Exception 예시
01-2 Exception handling
- try - except 문
- if - else 문과 유사한 형태
try:
예외 발생 가능 코드
except <Exception Type>:
예외 발생 시 대응하는 코드
- try - except - else 문
try:
예외 발생 가능 코드
except <Exception Type>:
예외 발생 시 대응하는 코드
else:
예외가 발생하지 않을 때 동작하는 코드
- try - except - finally 문
try:
예외 발생 가능 코드
except <Exception Type>:
예외 발생 시 대응하는 코드
finally:
예외 발생 여부와 상관없이 동작하는 코드
- raise 구문: 강제로 Exception을 발생 시킴
raise <Exception Type>("예외 정보")
- assert 구문: 특정 조건을 만족하지 않는 경우 Exception을 발생 시킴
assert 예외조건
# example
def get_binary_number(decimal_number):
assert isinstance(decimal_number, int) # decimal_number가 int가 아닌 경우 Exception
return bin(decimal_number)
print(get_binary_number("지은")) # AssertionError
02 File Handling
02-1 File
- 파일 시스템 file system
- OS에서 파일을 저장하는 트리 구조의 저장 체계
- 파일 file
- 컴퓨터 등의 기기에서 의미 있는 정보를 담는 논리적인 단위
- 파일은 파일명과 확장자로 식별됨
- ex. hello.py
- hello: 파일명
- py: 확장자
- ex. hello.py
- 디렉토리 directory
- 파일과 다른 디렉토리를 포함할 수 있음
- 파일의 종류
binary 파일 text 파일 컴퓨터만 이해할 수 있는 형태인 이진(법)형식으로 저장된 파일 사람이 이해할 수 있는 형태인 문자열 형식으로 저장된 파일 일반적으로 메모장으로 열면 내용이 깨져 보임 메모장으로 내용 확인 가능 엑셀 파일, 워드 파일 등 html 파일, 파이썬 코드 파일 등
02-2 File Handling
- File I/O
f = open("파일 이름", "접근 모드")
f.close()
-
- 접근 모드
- r: read. 읽기 모드
- w: write. 쓰기 모드
- a: append. 추가 모드
- 접근 모드
- File Read
- open과 close 사용
- with 구문과 open을 함께 사용
- close 없이도 ok
with open("filename.txt", "r") as my_file:
contents = my_file.read()
print(type(contents), contents)
- File Write
- mode=“w”
- encoding
- 맥 / 리눅스: utf8
- 한글 윈도우: cp949
- encoding
- mode=“w”
f = open("count_log.txt", 'w', encoding="utf8")
for i in range(1, 11):
data = "%d번째 줄입니다.\\n" % i
f.write(data)
f.close()
-
- mode=”a”
with open("count_log.txt", 'a', encoding="utf8") as
f: for i in range(1, 11):
data = "%d번째 줄입니다.\\n" % i
f.write(data)
02-3 Directory Handling
- OS 모듈 활용
- directory 생성
import os
os.mkdir("log") # log라는 이름의 directory 생성
-
- directory가 있는지 확인
import os
os.path.exists("log") # log directory가 있으면 True
- shutil 모듈 활용
- 파일 복사
import shutil
source = "i_have_a_dream.txt"
new = os.path.join("abc", "jieun.txt") # os.path.join: 경로 연결
shutil.copy(source, new) # source를 new로 복사
-
-
- cf. 왜 abc\\jieun.txt라고 쓰지 않고 os.path.join 함수를 사용할까?
- os마다 경로 지정 방식이 다르기 때문 !
-
- pathlib 모듈 활용
- 현재 directory / 상위 directory 확인
import pathlib
cwd = pathlib.Path.cwd() # cwd(): current working directory
cwd.parent # 현재 directory의 상위 directory
- log 파일 생성하기
# 로그 파일 생성
import os
if not os.path.isdir("log"): # log 디렉토리 존재 여부 확인
os.mkdir("log")
if not os.path.exists("log/count_log.txt"): # count_log.txt 파일 존재 여부 확인
f = open("log/count_log.txt", "w", encoding="utf8")
f.write("기록이 시작됩니다\\n")
f.close()
# 로그 기록
with open("log/count_log.txt", "a", encoding="utf8") as f:
import random, datetime
for i in range(1, 11):
stamp = str(datetime.datetime.now())
value = random.random()*1000000
log_line = stamp + "\\t" + str(value) + "값이 생성되었습니다" + "\\n"
f.write(log_line)
- pickle
- 파이썬의 객체를 영속화(persistence)하는 built-in 객체
- 객체는 메모리에 저장되므로 파이썬 인터프리터가 종료되면 객체도 사라짐
- → 파이썬 인터프리터 종료 이후에도 다시 객체를 사용하기 위하여 pickle을 사용
import pickle # pickle file 생성 f = open("list.pickle", "wb") # wb: write binary test = [1, 2, 3, 4, 5] pickle.dump(test, f) f.close() # 생성한 pickle file 불러와서 사용 f = open("list.pickle", "rb") # read binary test_pickle = pickle.load(f) print(test_pickle). # [1, 2, 3, 4, 5] f.close()
- 파이썬의 객체를 영속화(persistence)하는 built-in 객체
03 Log Handling
03-1 Logging
- Logging
- 프로그램이 실행되는 동안 발생되는 정보를 기록으로 남기기
- 프로그램이 실행되는 동안 발생되는 정보: 유저의 접근, 프로그램의 exception, 특정 함수의 사용 등
- 기록으로 남기기: console 화면에 출력, 파일로 남기기, DB에 남기기 등
- cf. 기록의 분류
- 실행시점에서 남겨야 하는 기록 → for 유저 분석
- 개발시점에서 남겨야 하는 기록 → for debugging
- 프로그램이 실행되는 동안 발생되는 정보를 기록으로 남기기
- print vs logging
- console 화면에 출력함으로써 기록을 남길 수 있음
- 하지만, console에만 기록을 남길 경우 이후 분석 등에 사용할 수 없음
- logging 모듈
import logging
logging.debug("틀렸잖아!")
logging.info("확인해")
logging.warning("조심해!")
logging.error("에러났어!!!")
logging.critical ("망했다...")
- logging level
- log 관리 시 가장 기본이 되는 설정 정보
- DEBUG > INFO > WARNING > ERROR > Critical
- logging을 위해 필요한 설정
- 데이터 파일 위치
- 파일 저장 위치
- operation type 등
03-2 configparser
- config file
# example.cfg
[SectionOne] # Section
Name: Hailey # key:value 형태로 속성 저장
Value: Yes
Age: 23
[SectionTwo]
Color: blue
[SectionThree]
FamilyName: Park
- configparser file
import configparser
config = configparser.ConfigParser()
config.read('example.cfg')
config.sections() # ['SectionOne', 'SectionTwo', 'SectionThree']
for key in config['SectionTwo']:
print(key) # Color
config['SectionOne']['Name'] # Hailey
03-3 argparser
- console 창에서 프로그램 실행 시 setting 정보를 저장함
'AI Basic > Python' 카테고리의 다른 글
[Python] 09 Data Handling (0) | 2023.03.08 |
---|---|
[Python] 07 Python Object Oriented Programming (0) | 2023.03.07 |
[Python] 06 Pythonic Code (0) | 2023.03.07 |
[Python] 05 Python Data Structure (0) | 2023.03.07 |
[Python] 04 Advanced Function Concept (0) | 2023.03.07 |
댓글