2021 네이버 부스트캠프 - Ai tech

Week1_Python_File / Exception / Log Handling

미미수 2021. 8. 4. 15:25

모르면 프로그래밍 하기 어려운 삼총사 : Exception/File/Log Handling


1. Exception Handling

프로그래밍할때 예상치 못한 많을 일들을 최대한 대비하기 위해 예외처리(Exception)을 해준다.

직접 if & print문을 찍어서 할수도 있지만, (사실 본인이 가장 편한대로 하면됨)

Exception Handling 문법을 사용했을때 훨씬 편리한 경우도 많다는점!!

 

if문은 -> '알고리즘 로직 처리' 에 주로 쓰이고,

Exception은 -> 잘못된 입력, 데이터 유실 등등 잘못된것을 바로잡기 위한 용도라고 보면 된다.

 

 

[try ~ except]

 

기본적으로 아래와 같은 문법을 따른다.

try:
    예외 발생 가능 코드
except <Exception Type>:
	예외 발생시 대응하는 코드

* Exception Type은 정말 많고 파이썬 라이브러리 공식 문서에 다 나와있으니 참고하자.

* 추가적으로 개인이 Exception을 만들 수도 있다.

* Exception 은 여러가 계속 달 수 있다. try ~ except ~ except~...

 

a = [1,2,3,4,5]
for i in range(10): # i : 0~9
	try:
    	print(10//i) #10을 i로 나눈 몫 출력
    except ZeroDivisionError:
    	print("Error") # Error발생시 프로그램 종료하지 않고 다시 try로 돌아감. 약간 continue같음

 

보통 프로그램이 돌아가다가 오류를 만나면 오류를 출력하고 프로그램을 멈춘다.

하지만 Exception을 쓰면 오류를 출력하고 계속 프로그램을 이어나갈 수 있다.

 

 

 

 

[ raise ] 

 

필요에 따라 강제로 Exception을 발생 시킨다. 원하는 위치 원하는 조건에서

while True:
	value = input("변환할 정수 값을 입력해주세요") # = 0~9사이로 입력받겠다
    for digit in value:
    	if digit not in "0123456789":
        	raise ValueError("숫자값을 입력하지 않으셨습니다")
    print("정수값으로 변환된 숫자 -", int(value))

 

[ assert ] 

 

특정 조건을 만족하지 않을 경우 예외 발생 시킨다.

assert 예외조건

 

def get_binary_number(decimal_number):
	assert isinstance(decimal_number, int)
    return bin(decimal_number)
    
print(get_binary_number(10))

위의 assert isinstance같은 경우는 decimal_number가 뒤에 나오는 int type인지 T/F으로 반환해 에러를 발생시킨다.

 


2. File Handling

 

우선 기본적으로 파일 종류가 뭐가 있는지 알아야 한다. (.docx, .ppt, .json , .py 같은건 소분류고 대분류는 크게 두가지)

Binary 파일 Text 파일
- 컴퓨터만 이해할 수 있는 이진 파일
- 인간이 이해할 수 없다.

예시 )
- 인간도 이해할 수 있는 파일
- 문자열 형식
- HTML, python code, .json 등등 readable

[ read() ]

text 파일 안에 있는 내용 문자열로 반환

f = open("lala.txt", "r") # 주소 설정
content = f.read() # 실질적으로 읽는 부분
f.close()

 

[ with open ]

as 뒤에 나오는 변수로 파일 연다.

with open("lala.txt" , "r") as my_file:
	content = mu_file.read()
    print(content)

파일 이름 뒤에 나와있는 "r"의 위치에는 파일을 어떤 모드로 열지 정하는 곳이다.

"r" -> read only "w" -> 수정모드 ....

 

[ Os module ]

 

os.mkdir~

os.path.join~ 

등등 os 모듈에서 데릭토리와, 파일, 경로등을 핸들링 할 수 있게 해준다.

 


3. Pickel

 

컴퓨터 구조를 한번 생각해보면, 어떤 프로그램을 실행시켰을때 사용되는 변수와 객체들은 영구적으로 저장이 될 수도 있지만 주로 실행시켰을때만 반짝 사용이 된다. 파이썬에서 코드를 돌릴때도 변수들은 프로그램이 종료되면서 전부 사라진다.

 

Pickle은 객체들이 휘발되지 않고 영속화 될 수 있게 해준다.

 


4. Log Handling

 

: 프로그램이 실행되는 동안 이렁나는 정보를 기록을 남기는것!

접근, Exception 발생여부 등등 프로그램 실행동안의 상황을 저장해서 나중에 다시 볼 수 있게 한다.

 

print와 하는 역할은 비슷하지만, 콘솔창에만 남고, logging을 하면 파일로 저장이 된다.\\

 

[ logging 모듈 ]

 

import logging

logger = logging.getLogger("main") # Logger 선언
stream_handler = logging.StreamHandler  # Logger의 output방법 선언
loger.addHandler(stream_handler)  # Logger 의 output 기록