본문 바로가기
BoostCamp AI Tech - U Stage

BoostCamp AI Tech - Day05

by getamped 2021. 1. 22.

오늘 강의에서는 프로그램을 제대로 만들기 위해 알아야 하는 예외 처리 파일 다루기,로깅에 대해서 배웠다.

 

 

1. 예외 처리 (Exception Handling)

1.1 예상 가능한 예외

- 발생 여부를 사전에 인지할 수 있는 예외

- 사용자의 잘못된 입력, 파일 호출 시 파일 없음

- 개발자가 반드시 명시적으로 정의 해야함

 

1.2 예상이 불가능한 예외

- 인터프리터 과정에서 발생하는 예외, 개발자 실수

- 리스트의 범위를 넘어가는 값 호출, 정수 0으로 나눔

- 수행 불가시 인터프리터가 자동 호출

 

1.3 Python에서의 예외 처리

- try ~ except 문법

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

ex) 0으로 나눌 때

for i in range(10):
	try:
		print(10 / i)
	except ZeroDivisionError:
		print("Not divided by 0")
'''
Not divided by 0
10
5
3
2
2
1
1
1
1
'''

예외 정보를 표시할 때

for i in range(10):
	try:
		print(10 / i)
	except ZeroDivisionError as e:
    # 예외 정보 표시
		print(e)
	print("Not divided by 0")

 

여기서 알 수 있는 점은 예외처리를 해도 for loop안에서 탈출하지 않는 다는 것이다.

 

※ Python에는 Built-in Exception(기본적으로제공하는예외)가 다음과 같이 있다고 한다.

Exception 이름 내용
IndexError List의 Index 범위를 넘어갈 때
NameError 존재하지 않은 변수를 호출 할 때
ZeroDivisionError 0으로 숫자를 나눌 때
ValueError 변환할 수 없는 문자/숫자를 변환할 때
FileNotFoundError 존재하지 않는 파일을 호출할 때

- try ~ except ~ else 

try:
	예외 발생 가능 코드
except <Exception Type>:
	예외 발생시 동작하는 코드
else:
	예외가 발생하지 않을 때 동작하는 코드

ex)

for i in range(10):
	try:
		result = 10 / i
	except ZeroDivisionError:
		print("Not divided by 0")
	else:
		print(10 / i)

- try ~ except ~ finally

try:
	예외 발생 가능 코드
except <Exception Type>:
	예외 발생시 동작하는 코드
finally:
	예외 발생 여부와 상관없이 실행됨

ex)

try:
	for i in range(-4,10):
		result = 10 // i
		print(result)
except ZeroDivisionError:
        print("Not divided by 0")
finally:
		print("종료되었습니다.")
'''
-3
-4
-5
-10
Not divided by 0
종료되었습니다.
'''

- raise : 필요에 따라 고의로 예외를 발생시킴

raise <Exception Type>(예외정보)
while True:
	value = input("변환할 정수 값을 입력해주세요")
	for digit in value:
		if digit not in "0123456789":
			raise ValueError("숫자값을 입력하지 않으셨습니다")
	print("정수값으로 변환된 숫자 -", int(value))
'''
변환할 정수 값을 입력해주세요12
정수값으로 변환된 숫자 - 12
변환할 정수 값을 입력해주세요sdasd
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-43b41b59c20b> in <module>
      3         for digit in value:
      4                 if digit not in "0123456789":
----> 5                         raise ValueError("숫자값을 입력하지 않으셨습니다")
      6         print("정수값으로 변환된 숫자 -", int(value))

ValueError: 숫자값을 입력하지 않으셨습니다
'''

- assert : 특정조건에 만족하지 않을 경우 예외발생

assert 예외조건
def get_binary_nmubmer(decimal_number):
	assert isinstance(decimal_number, int)
	return bin(decimal_number)
print(get_binary_nmubmer(10))

2. 파일 다루기(File Handling)

2.1 디렉토리 (Directory)

- 폴더라고도 불림

- 파일과 다른 디렉토리를 포함할 수 있음

2.2 파일 (File)

- 컴퓨터에서 정보를 저장하는 논리적인 단위 (wikipedia)

- 파일은 파일명과 확장자로 식별됨 (예: hello.py)

- 실행, 쓰기, 읽기 등을 할 수 있음

2.3 파일의 종류

- 기본적인 파일 종류로 text 파일과 binary 파일로 나눔

- 컴퓨터는 text 파일을 처리하기 위해 binary 파일로 변환시킴 (예: pyc파일)

- 모든 text 파일도 실제는 binary 파일, ASCII/Unicode 문자열 집합으로 저장되어 사람이 읽을 수 있음

Binary 파일 Text 파일
- 컴퓨터만 이해할 수 있는 형태인 이진(법)형식으로 저장된 파일
- 일반적으로 메모장으로 열면 내용이 깨져 보임 (메모장 해설 불가)
- 엑셀파일, 워드 파일 등등
- 인간도 이해할 수 있는 형태인 문자열 형식으로 저장된 파일 - 메모장으로 열면 내용 확인 가능 - 메모장에 저장된 파일, HTML 파일, 파이썬 코드 파일 등

2.4 Python I/O

f = open("<파일이름>","접근 모드")
f.close()
파일 열기 모드 설명
r 읽기모드 - 파일을 읽기만 할 때 사용
w 쓰기모드 - 파일에 내용을 쓸 때 사용
a 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용

2.5 파이썬의 File Read

- read() : txt 파일 안에 있는 내용을 문자열로 반환

f = open("i_have_a_dream.txt", "r" ) # 대상 파일이 같은 폴더에 경우(상대경로)
contents = f.read()
print(contents)
f.close()

- with 구문을 사용하여 나타낼 수 있다.

with open("i_have_a_dream.txt","r") as my_file:
	contents = my_file.read()
	print (type(contents), contents)

- readlines() : 한 줄씩 읽어 List Type으로 반환함

with open("i_have_a_dream.txt","r") as my_file:
	content_list = my_file.readlines() #파일 전체를 list로 반환
	print(type(content_list)) #Type 확인
	print(content_list) #리스트 값 출력

- readline() : 실행 시 마다 한 줄 씩 읽어 오기

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 += 1

ex) i_have_a_dream의 문자열 내용을 받아 통계처리

with open("i_have_a_dream.txt","r") as my_file:
	contents = my_file.read()
	word_list = contents.split(" ")
#빈칸 기준으로 단어를 분리 리스트
	line_list = contents.split("\n")
#한줄 씩 분리하여 리스트
print("Total Number of Characters :", len(contents))
print("Total Number of Words:", len(word_list))
print("Total Number of Lines :", len(line_list))

'BoostCamp AI Tech - U Stage' 카테고리의 다른 글

BoostCamp AI Tech - Day07  (0) 2021.01.26
BoostCamp AI Tech - Day06  (0) 2021.01.25
BoostCamp AI Tech - Day04  (0) 2021.01.21
BoostCamp AI Tech - Day03  (0) 2021.01.20
BoostCamp AI Tech - Day02  (0) 2021.01.19

댓글