스터디/파이썬 스터디 강의자료

[1팀/허서원] 10차시 파이썬 스터디 - 예외처리

허서원 2023. 6. 1. 23:14

10차시_예외처리_강의안.pdf
0.87MB
10차시_예외처리_과제.pdf
0.19MB

예외처리


학습목표

  • 예외의 개념과 사례에 대해 알아본다.
  • 예측 가능한 예외와 예측 불가능한 예외에 대해 이해한다.
  • 파일의 개념과 종류에 대해 학습한다.
  • 파일을 읽고 쓰는 방법을 실습하고, pickle 모듈에 대해 알아본다.

01 예외처리

  • 예외의 개념과 사례

예외(exception) : 프로그램을 개발하면서 예상하지 못한 상황이 발생하는 것

EX)

  • 사용자의 입력 오류 → 프로그래머의 실수로 인코딩에 문제 발생
  • 자동 저장autosave 기능 → 작업하던 중 갑자기 컴퓨터가 종료되었을 때를 대비하여 작업한 것을 중간에 자동으로 저장해주는 기능
  • 예측 가능한 예외와 예측 불가능한 예외
    • 예측 가능한 예외

→ 발생 여부를 개발자가 사전에 인지할 수 있는 예외

ex) 텍스트 박스에 사용자가 실수로 잘못된 값을 입력할 것 같다, 사용자가 실제로 존재하지 않는 파일에 저장할 것 같다 등… 개발자가 사전에 예측할 수 있는 것

⇒ 개발자는 예외를 예측하여 명시적으로 예외가 발생할 때는 어떻게 대응하라고 대책 마련 가능

  • 예측 불가능한 예외

ex) 매우 많은 파일을 처리할 때

⇒ 인터프리터가 자동으로 예외라고 사용자에게 알려줌

프로그램도 일종의 제품이므로 제품의 완성도를 높이는 차원에서 예외 처리는 중요하다.

  • 예외 처리 구문
    • try-except문

예외 처리의 기본 문법

try:
	예외 발생 가능 코드
except 예외 타입:
	예외 발생 시 실행되는 코드

만약 여기서 try문이 for문 밖에 있으면 어떤 일이 발생할까?

-> 반복문 전체가 종료

try문 내부에서 예외 발생 → except문 영역에 있는 코드 실행→ tryexcept문 종료

 

  • try-except-else문

if-else문과 비슷함. 해당 예외가 발생하지 않는 경우 수행할 코드를 else문에 작성

try:
	예외 발생 가능 코드
except 예외 타입:
	예외 발생 시 실행되는 코드
else:
	예외가 발생하지 않을 때 실행되는 코드

에러가 발생하지 않는 경우의 수행문을 정의해 놓으면 에러가 발생하지 않는 경우에도 일어날 일을 사용자가 정확히 예측할 수 있다!

but 많이 사용하지 않는 코드

  • try-except-finally문
try:
	예외 발생 가능 코드
except 예외 타입:
	예외 발생 시 실행되는 코드
finally:
	예외 발생 여부와 상관없이 실행되는 코드

finally문 : try-except문 안에 있는 수행 코드가 아무런 문제없이 종료되었을 경우 최종으로 호출하는 코드 (for문에서 사용하는 finally문과 용도가 비슷)

  • raise문

필요할 때 예외를 발생시키는 코드

raise 예외 타입(예외 정보)
  • assert문

미리 알아야 할 예외 정보가 조건을 만족하지 않을 경우 예외를 발생시킴

assert문은 True 또는 False의 반환이 가능한 함수를 사용→ False가 반환되면 예외가 발생한다.

assert 예외 조건

02 파일 다루기

  • 파일의 개념
  • 파일: 컴퓨터를 실행할 때 가장 기본이 되는 단위 → 프로그램을 실행하는 것은 늘 파일을 실행하는 것이다.
  • 파일의 종류기본적으로 바이너리 파일과 텍스트 파일 두 가지로 분류할 수 있다.
    • 바이너리 파일(binary file)
    컴퓨터만 이해할 수 있는 이진 정보로 저장된 파일ex) 워드 프로그램, 엑셀
  • → 비트 형태로 저장되어 메모장으로 열면 내용이 보이지 않거나 내용을 확인할 수 없는 파일
  • 텍스트 파일(text file)

사람이 이해할 수 있는 문자열로 저장된 파일

→ 메모장으로 그 내용을 확인할 수 있다.

ex) 파이썬 파일, 워드 프로그램

  • 파일 읽기

open( ) 함수 사용

f =open("파일명", "파일 열기 모드")
f.close()

파일을 여는 모드에는 읽기 모드, 쓰기 모드, 추가 모드 등이 있다.

파이썬에서는 상황에 따라 이러한 형식을 조합

  1. 파일 읽기
f = open ("dream .txt", "r")
contents = f.read()
print(contents)
f.close()

→ 1. open() 함수 다음에 파일명과 ‘r’을 입력해 파일에 대한 정보를 변수 f에 저장 (파일 객체)

2. 변수 f를 이용해 read() 함수 실행 : 해당 파일의 텍스트를 contents 변수에 문자열로 저장

3. contents 변수의 내용, 즉 ‘dream.txt’ 파일에 있는 텍스트를 화면에 출력한다.

4. close() 함수를 사용하여 파일을 종료한다.

텍스트 파일을 다룰 때 이미 수정하고 있는 파일을 다른 프로그램에서 동시에 호출하면 에러 발생

하나의 파이썬 프로그램이 하나의 파일을 사용할 때 사용을 완료하면 반드시 해당 파일을 종료해야 한다.

 

2. with문과 함께 사용하기

with문과 함께 open() 함수를 사용할 수 있다.

with문은 들여쓰기를 하는 동안에는 open()함수가 유지되고, 들여쓰기가 끝나면 open() 함수도 종료

차이점 : close() 함수를 명시적으로 쓰지 않아도 파일의 사용을 종료할 수 있다 특히 해당 파일 객체는 =로 할당하는 방식이 아니라 as문을 사용하여 변수명에 할당

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

3. 한 줄씩 읽어 리스트형으로 반환하기

readlines() 함수를 사용하여 한 줄씩 내용을 읽어와 문자열 형태로 저장할 수 있다.

한 줄의 기준은 \n으로 나뉘어지고 리스트로 반환될 때 for문 등 다양한 형태로 활용할 수 있다.

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

4. 실행할 때마다 한 줄씩 읽어 오기

readline()는 실행할 때마다 차례대로 한 줄씩 읽어온다.

with open("dream.txt", "r") as my_file:
	i =0
	while 1:
		line = my_file.readline()
		if not line:
			break
		print(str(i)+" === "+ line.replace("\\n","")) # 한 줄씩 값 출력
		i =i + 1

5. 파일에 저장된 글자의 통계 정보 출력하기

파일에 저장된 텍스트의 통계 정보를 읽어와야 할 때 → split() 함수와 len() 함수를 함께 사용

with open("dream.txt", "r") as my_file:
	contents = my_file.read()
	word_list = contents.split("")   # 빈칸 기준으로 단어를 분리하여 리스트
	line_list = contents.split("\\n") # 한 줄씩 분리하여 리스트

print("총 글자의 수:", len(contents))
print("총 단어의 수:", len(word_list))
print("총 줄의 수:,', len(line_list))
  • 파일 쓰기

인코딩 : 텍스트 파일을 저장할 때 사용하는 표준을 지정

인코딩 옵션으로 인코딩 표준을 지정할 수 있다. 일반적으로 인코딩은 utf-8을 많이 사용하며, 파일을 윈도우에서만 사용한다면 cp949도 사용

인코딩은 운영체제나 파일의 사용 환경에 따라 다르게 설정해야 한다.

  • pickle 모듈

영속화(persistence) : 필요한 객체를 파일로 저장시켜 다시 사용할 수 있도록 하는 것

파이썬은 pickle 모듈을 제공하여 메모리에 로딩된 객체를 영속화할 수 있도록 지원한다.

pickle 모듈을 사용하기 위해서 호출한 후 객체를 저장할 수 있는 파일을 열고 저장하고자 하는 객체 dump 한다. 파일을 생성할 때는 ‘w’가 아닌 ‘Wb’로 열어야 함! (여기서 B는 바이너리를 뜻하는 약자) dump() 함수에서는 저장할 객체, 저장될 파일 객체를 차례대로 인수로 넣으면 해당 객체가 해당 파일에 저장된다.