* coursera 강좌에서 exceptiong handling에 대해 간략하게 배웠다. 관련 내용에 대해 좀 더 자세히 알아보자!!
Python Basics(1). (from Coursera)
1) Python Basics # Types e.g) 11 (int) / 12.32 (float) - can check the specifics of floats 'sys.float_info' / "I love Python" (str) / True, False (bool) → By using the data type, we can see the a..
sh-avid-learner.tistory.com
Excpetion Handling
① 예상 가능한 예외: 발생 여부를 사전에 인지할 수 있는 예외로, 개발자가 반드시 명시적으로 정의해준다!
② 예상 불가능한 예외: 인터프리터 과정에서 발생하는 예외로, 예를 들어 리스트의 범위를 넘어가는 값 호출, 또는 정수 0으로 나누는 case들이 있으며, 수행 불가 시 인터프리터가 자동으로 호출해준다.
→ 따라서 예외가 발생할 때 후속 조치를 위해 exception handling이 필요하다!
(예를 들어 없는 파일 호출하면 파일 없음을 알림, 게임 이상 종료하면 게임 정보를 저장하는 등)
★ try - except 구문
a = [1,2,3,4,5]
for i in range(10):
try:
print(10/i)
print(a[i])
except ZeroDivisionError:
print('Not divided by 0')
except IndexError as e:
print(e)
except Exception as e:
print(e)
→ i가 0일 경우의 exception 잡고(ZeroDivisionError 발생) 다시 위로 가서 계속 code 실행
→ a[i]에서 i값이 4를 넘어갈 경우 IndexError가 발생한다.
→ 그 외의 기타 에러를 잡을 때는 Exception으로 잡음 (권장 x - 사용자 입장에서 어디에서 에러가 발생했는 지 알 수 없으므로)
★ try - except - else 구문: else문은 예외가 발생하지 않을 때 발생하는 코드를 넣는다.
★ try - except - finally 구문: finally문은 예외 발생 여부와 상관없이 실행된다.
★ raise문: 필요에 따라 강제로 exception 발생 - raise <Exception Type>
→ 코드를 중간에 멈출 수 있게끔!
while True:
value = input('변환할 정수 값을 입력해주세요.')
for digit in value:
if digit not in "0123456789":
raise ValueError('숫자값을 입력하지 않았습니다.')
print('정수값으로 변환된 숫자 - ', int(value))
★ assert문: 특정 조건에 만족하지 않을 경우 예외 발생 - assert 예외조건
→ 제대로 함수를 사용하고 있는 지, 도중에 확인차원을 위해 assertion
def get_binary_number(decimal_number):
assert isinstance(decimal_number, int)
return bin(decimal_number)
print(get_binary_number(10))
File Handling
◆ 파일 시스템 = OS에서 파일을 저장하는 트리구조 저장 체계
◆ 기본적인 파일 종류로 text 파일과 binary 파일로 나뉜다. 컴퓨터는 text 파일을 처리하기 위해 binary 파일로 변환시킨다. 모든 text 파일도 실제는 binary 파일, ASCII/Unicode 문자열 집합으로 저장되어 사람이 읽을 수 있다.
Binary 파일 | Text 파일 |
컴퓨터만 이해할 수 있는 형태인 이진(법)형식으로 저장됨 | 인간도 이해할 수 있는 형태인 문자열 형식으로 저장됨 |
일반적으로 메모장으로 열면 내용 깨져 보임 | 메모장으로 열면 내용 확인 가능 |
엑셀, 워드 파일 등등 | 메모장, HTML, python code 파일 등등 |
◆ File I/O - 파일 처리를 위해 'open' 키워드 사용: 접근 모드는 r(읽기모드), w(쓰기모드), a(추가모드)
f = open('<파일이름>', '접근 모드')
f.close()
→ 대상파일이 같은 폴더에 있으면 상대경로를 사용한다.
f = open('i_have_a_dream.txt', "r")
contents = f.read()
print(contents)
f.close()
◆ with 구문과 함께 사용
→ with 구문 내 indentation block 내용은 파일이 열려 있는 동안 모두 적용됨. indentation block이 나가면 자동적으로 파일은 닫힘
(별도의 close() 없어도 됨)
with open('i_have_a_dream.txt', 'r') as my_file:
contents = my_file.read()
print(type(contents), contents)
◆ readlines() - 한 줄씩 읽어 반환 (즉, read()는 통째로 가져옴)
with open('i_have_a_dream.txt', 'r') as my_file:
content_list = my_file.readlines()
print(type(content_list))
print(content_list)
+ 실행 시 마다 한 줄씩 읽어 오기
with open('i_have_a_dream.txt', 'r') as my_file:
i = 0
while True:
line = my_file.readline()
if not line:
break
print(str(i) + " === " + line.replace('\n', '')) #한 줄씩 값 출력
i = i + 1
+ split(" ")을 하면 단어를 분리할 수도 있음 / split("\n")을 하면 한 줄씩 분리됨
◆ file write - mode는 'w', encoding은 'utf8' (mode가 a이면 덧붙여 씀)
→ encoding은 컴퓨터가 문자를 어떤 방식으로 저장하는 지, 표준 종류를 뜻함 (Window는 cp949를 쓰기도)
(* 데이터 저장할 때 encoding을 확인)
f = open('count_log.txt', 'w', encoding = 'utf8')
for i in range(1,11):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
◆ 파이썬의 디렉토리 다루기 - os module을 사용하여 다루기 (docu로 유용한 함수 많이 배우자 + shutill module로 파일 옮기기 가능)
import os
os.mkdir('log')
if not os.path.isdir('log'):
os.mkdir('log')
#또는 try - except 구문 사용 가능
try:
os.mkdir('abc')
except FileExistsError as e:
print('already created')
◆ 또는 pathlib module을 사용하여 path를 객체로 다룰 수 있다.
Pickle
= '파이썬의 객체를 영속화하는 built-in 객체'
→ 객체는 메모리에 존재하는데, interpreter가 끝나면 메모리에서 사라짐. 따라서 객체를 영원히 메모리에 저장할 수 있게끔
→ 저장해야 하는 정보, 계산 결과(모델) 등 활용이 많음 (class도 메모리에 영속화 저장 가능)
import pickle
f = open('list.pickle', 'wb') #binary 파일로 저장
test = [1,2,3,4,5]
pickle.dump(test,f)
f.close()
del test #메모리에서 지움
f = open('list.pickle', 'rb') #읽어옴
test_pickle = pickle.load(f)
print(test_pickle)
f.close()
Logging Handling
◎ Logging이란? 프로그램이 실행되는 동안 일어나는 정보를 기록으로 남기는 것으로, 유저의 접근, 프로그램의 exception, 특정 함수를 사용할 때 주로 이용된다. console 화면에 출력, 파일에 남기기, db에 남기기 등등 다양한 case에 사용되며, 기록된 로그를 분석하여 의미있는 결과를 도출할 수 있다. 실행시점에서 남겨야 하는 기록, 개발시점에서 남겨야 하는 기록등등이 해당됨.
◎ print와 다른 점은, console 창에만 남기는 기록은 분석 시 사용이 불가능하기 때문이다 (다 사라지므로), 따라서 때로는 레벨별(개발,운영)로 기록을 남길 필요도 있다. 모듈별로 별도의 로깅을 남길 필요도 있으며, 이러한 기능을 체계적으로 지원하는 모듈이 필요하다.
◎ logging module
import logging
logging.debug('틀렸잖앙!')
logging.info('확인해')
logging.warning('조심')
logging.error('에러났음')
logging.critical('망했슴')
→ logging level: 프로그램 진행 상황에 따라 다른 level의 log를 출력하며, 개발 시점, 운영 시점마다 다른 log가 남을 수 있도록 지원한다. debug > info > warning > error > critical. log 관리 시 가장 기본이 되는 설정 정보가 로깅 레벨
(기본 로깅 레벨은 warning 이상 - operation level에서 사용자에게 알려줌 - basicConfig에서 level인자를 다르게 설정하면 됨)
◎ 환경을 미리 설정 - configparser(파일 설정) & argparser(실행 시점 설정)
① configparser - 프로그램 실행 설정을 file에 저장함. section, key, value 값의 형태로 설정된 설정 파일을 사용. 설정파일을 dict type으로 호출 후 사용 (cfg 파일)
② argparser - console 창에서 프로그램 실행 시 setting 정보 저장, 거의 모든 console 기반 파이썬 프로그램 기본으로 제공, 특수 모듈도 많이 존재하지만(TF), 일반적으로 argparse를 사용, command-line option이라고 부름
* 출처) 네이버 AI Tech 강좌
* 썸네일 출처) https://www.istockphoto.com/kr/%EC%9D%BC%EB%9F%AC%EC%8A%A4%ED%8A%B8/exception
'Python > Fundamentals' 카테고리의 다른 글
λ 표현식 (0) | 2022.08.21 |
---|---|
list, string, tuple, dictionary, set (iterables) (0) | 2022.08.19 |
python OOP (0) | 2022.07.07 |
Python Basics(2). (from Coursera) (0) | 2022.04.13 |
Python Basics(1). (from Coursera) (0) | 2022.04.04 |
댓글