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

[3팀/김규리] 10차시 파이썬 스터디 - 예외처리

kyuree 2023. 6. 1. 23:01

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

#1. 예외 처리

예외의 개념과 사례


  • 예외 처리(exception handling)
    • 실제 프로그램 만들기 위해 알아야 함
  • 예외
    • 프로그램 개발하면서 예상하지 못한 상황이 발생하는 것
  • 대표적인 사례
    • 사용자의 입력 오류
    • 예시
      • 웹사이트에 새로 가입을 위해 아이디 생성
      • 일반적으로 아이디 → 영뭊자, 숫자
      • 한글 입력 시도
      • 문제 없이 한글이 저장되면 사용자가 자칫 로그인 못 할 수도 있음
  • 또다른 사례
    • Ms 오피스의 자동 저장 기능
    • 작업 중 정전 등의 이유로 갑자기 종료됐을 대를 대비 → 작업 중간에 자동으로 저장

예측 가능한 예외와 예측 불가능한 예외


  • 예의 종류 두 가지
    • 예측 가능한 예외
    • 예측 불가능한 예외
  • 예측 가능한 예외
    • 발생 여부를 개발자가 사전에 인지할 수 있는 예외
    • 예시
      • ‘텍스 트 박스에 사용자가 실수로 잘못된 값을 입력할 것 같다
      • 사용자가 실제로 존재하지 않는 파일에 저장할 것 같다.’
    ⇒ 개발자는 예외를 예측하여 명시적으로 예외가 발생할 때는 어떻게 대응하 라고 대책을 마련해 놓을 수 있음
    • 사용자 입력란에 값이 잘못 입력 → if문 사용하여 잘못 입력햇다고 응답
  • 예측 불가능한 예외
    • 대표적 사례
      • 매우 많은 파일을 처리할 때 문제가 발생할 수 있음
      • 5,000개의 파일이 한 디렉터리에 있고 그 파일명들을 넘겨 받아 파일을 하나씩 읽어들이는 프로그램을 만듦
      • 그런데 파일을 읽다가 어떤 파일 은 실제로 안에 내용이 없을 수 있는데, 이런 경우에도 어떤 처리를 하지 못하고 넘어감
      • 또는 파일을 읽고 있는데 다른 사용자에 의해 해당 파일이 삭제되어 읽어들이는 시점에 해당 파 일이 사라지는 경우도 발생할 수 있음
      • 이외에도 인덱스의 범위를 넘어가는 리스트의 호출
      • 정수를 0으로 나누는 것 등에 대한 문제가 생길 수 있음
    • 이 경우 → 인터프리터가 자동으로 이것이 예외라고 사용자에게 알림
    • 대부분은 이러한 예외가 발생하면서 프로그램이 종료되므로 적절한 조치 해야 함
    • 단순히 파일이 없다고 알려주는 것이 아니라 파일이 없기 때문에 추가로 해야 하는 조 치 있음
    • →그것을 예외 처리 구문에 추가해야 한다
      • 예를 들어, 처리해야 할 파일이 없다 면 파일이 없다고 기록을 남기고 다음 파일을 처리하는 방식으로 프로그램을 작성해야 함
    • 예외 처리 중요한 이유
      • 프로그램도 일종의 제품임
      • 완성도를 높이는 차원에서 중요한 개념

예외 처리 구문


  • try-except문
    • 파이썬에서 예외 처리의 기본 문법
    • 작성 방식
    • try: 예외 발생 가능 코드 except 예외 타입: 예외 발생 시 실행되는 코드

사용 예시

  • 0부터 9까지 숫자 → i에 하나씩 할당하며 10으로 나눈 값 출력
for i in range(10): 
		try:
			print(10 / i)
		except ZeroDivisionError:
			print("Not divided by 0")

 

  • 1이 아닌 0부터 시작 → 10을 0으로 나누는 계산 가장 먼저 실행
    • 0으로 10 나눌 수 없으므로 예외 발생
    • 예상 가능 → try문으로 대비
    • ZeroDivisionError
      • 0으로 나눠지는 경우에는 except문 안으로 들어가 해당 구문을 처리
      • print("Not divided by 0")
  • try문 내부 예외 발생 → excpet문 영역 코드 실행하고 종료

 

예측 가능한 예외와 예측 불가능한 예외


  • 예의 종류 두 가지
    • 예측 가능한 예외
    • 예측 불가능한 예외
  • 예측 가능한 예외
    • 발생 여부를 개발자가 사전에 인지할 수 있는 예외
    • 예시
      • ‘텍스 트 박스에 사용자가 실수로 잘못된 값을 입력할 것 같다
      • 사용자가 실제로 존재하지 않는 파일에 저장할 것 같다.’
    ⇒ 개발자는 예외를 예측하여 명시적으로 예외가 발생할 때는 어떻게 대응하 라고 대책을 마련해 놓을 수 있음
    • 사용자 입력란에 값이 잘못 입력 → if문 사용하여 잘못 입력햇다고 응답
  • 예측 불가능한 예외
    • 대표적 사례
      • 매우 많은 파일을 처리할 때 문제가 발생할 수 있음
      • 5,000개의 파일이 한 디렉터리에 있고 그 파일명들을 넘겨 받아 파일을 하나씩 읽어들이는 프로그램을 만듦
      • 그런데 파일을 읽다가 어떤 파일 은 실제로 안에 내용이 없을 수 있는데, 이런 경우에도 어떤 처리를 하지 못하고 넘어감
      • 또는 파일을 읽고 있는데 다른 사용자에 의해 해당 파일이 삭제되어 읽어들이는 시점에 해당 파 일이 사라지는 경우도 발생할 수 있음
      • 이외에도 인덱스의 범위를 넘어가는 리스트의 호출
      • 정수를 0으로 나누는 것 등에 대한 문제가 생길 수 있음
    • 이 경우 → 인터프리터가 자동으로 이것이 예외라고 사용자에게 알림
    • 대부분은 이러한 예외가 발생하면서 프로그램이 종료되므로 적절한 조치 해야 함
    • 단순히 파일이 없다고 알려주는 것이 아니라 파일이 없기 때문에 추가로 해야 하는 조 치 있음
    • →그것을 예외 처리 구문에 추가해야 한다
      • 예를 들어, 처리해야 할 파일이 없다 면 파일이 없다고 기록을 남기고 다음 파일을 처리하는 방식으로 프로그램을 작성해야 함
    • 예외 처리 중요한 이유
      • 프로그램도 일종의 제품임
      • 완성도를 높이는 차원에서 중요한 개념

예외 처리 구문


  • try-except문
    • 파이썬에서 예외 처리의 기본 문법
    • 작성 방식
    • try: 예외 발생 가능 코드 except 예외 타입: 예외 발생 시 실행되는 코드

사용 예시

  • 0부터 9까지 숫자 → i에 하나씩 할당하며 10으로 나눈 값 출력
for i in range(10): 
		try:
			print(10 / i)
		except ZeroDivisionError:
			print("Not divided by 0")

 

  • 1이 아닌 0부터 시작 → 10을 0으로 나누는 계산 가장 먼저 실행
    • 0으로 10 나눌 수 없으므로 예외 발생
    • 예상 가능 → try문으로 대비
    • ZeroDivisionError
      • 0으로 나눠지는 경우에는 except문 안으로 들어가 해당 구문을 처리
      • print("Not divided by 0")
  • try문 내부 예외 발생 → excpet문 영역 코드 실행하고 종료
  • +) 예외의 종류 & 예외에 대한 에러 메세지
    1. 예외의 종류
    • IndexError
      • 리스트의 인덱스 범위를 넘어갈 때 처리하는 예외
      • 코드를 작성하다 데이터가 150개인줄 알았는데. 151 개가 있어 처리를 요청하는 경우 IndexError가 호출됨
    • NameError
      • 코드에서 호출하는 특별한 변수명이 없을 때 호출되는 에러
      • 이 언어가 인터프리터언어이다 보니 존재하지 않은 변수도 실행 시점에서 잡아냄
      • 컴파일러 언어의 경우 실행 전이나 컴파일러 시점에 에러가 발생하는 것과는 대조적
    1. 예외에 대한 에러 메세지

사용 방법

  • except문의 마지막에 ‘as e’ 또는 ‘as 변수명’을 입력 → 해당 변수명을 출력
  • 사용 방법
for i in range(10):
		try:
			print(10 / i)
		except ZeroDivisionError as e:
			print(e)
			print('Not divided by 0')

 

try-except-else문

  • if-else 문과 비슷
  • 해당 예외가 발생하지 않는 경우 수행할 코드를 else문에 작성하면 됨
  • 기본 형태

 

  • 코드
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문 안에 있는 수행 코드가 아무런 문제 없이 종료되었을 경우 최종으로 호출하는 코드
  • for문에서 사용하는 finally문과 용도가 비슷
  • 기본 형식

 

  • 사용 예시
try:
		for i in ranged, 10):
			result =10 // i
			print(result)
except ZeroDivisionError:
			print("Not divided by 0")
finally:
		print("종료되었다.")

 

  • try문이 for문 밖에 선언되어 있고, 두가 1부터 시작
  • 사실상 ZeroDivision- Error가 발생할 수 없는 코드
  • 이러한 코드를 작성하면 except문은 실행되지 않고 마지 막으로 finally문만 실행
  • try-except-finally문도 for문에서 finally문을 사용하는 것 과 동일하게 예외 발생 여부와 상관없이 반드시 실행되는 코드

raise

  • 필요할 때 예외를 발생시키는 코드
  • while True문을 사용해 계속 반복문을 돌려야 하는 프로그램을 작성한다고 가정
    • 상대방 컴퓨터에 계속 무엇인가를 요청해야 하는 프로그램이고, 요청할 때마다 비용이 청구
    • 만약 상대방 컴퓨터가 고장나거나 문제가 생겨 사용하지 못하게 되는 상황이 발생한다면 어떻게 해야 할까?
      • 프 로그램을 작성할 때 상대방 컴퓨터에서 응답이 없다면 강제로 프로그램이 종료되도록 예외를 발생
  • 기본 형태

 

  • 사용 예시

 

  • 설명
    • while True문으로 반복문이 계속 돌아가는 상태에서 사용자에게 입력을 받음
    • 하지만 사용자가 입력한 값이 숫자가 아닌 경우에는 숫자값을 입력하지 않았다고 출 력하면서 프로그램을 종료하는 것을 목적으로 작성된 프로그램이
    • 이때, 에러의 종류는 ValueError로 사용자가 입력을 잘못했을 때 입력이 잘못된 것을 알려주면서 종료

 

assert문

  • 미리 알아야 할 예외 정보가 조건을 만족하지 않을 경우 예외를 발생
  • 앞에서 if문과 함께 raise문을 사용하여 강제로 예외를 발생
    • assert문 → 매우 간단하게 예외를 발생
  • True 또는 False의 반환이 가능한 함수를 사용
    • 만약 False가 반환되면 예외가 발생
  • 기본 형태

 

  • ㅅ사용 예시

 

  • 설명
    • 1행에서 get_binary_number() 함수를 통해 십진수를 입력받음
    • 하지만 함수를 사용하 는 사용자가 잘못된 인수argument, 예를 들어 문자열값을 입력할 수도 있음
    • 이를 방지하기 위해 2행에서 assert문을 사용
    • isinstance() 함수는 입력된 값이 다음에 나오는 클래스 의 인스턴스인지를 확인하는 함수
    • 이 코드에서 decimal_number 변수가 정수형 인지는 4〜 5행에서 확인할 수 있음
  • assert문은 코드를 작성할 때 잘못된 입력 여부를 사전에 확인하여 나중에 필요 없는 연산을 막아주고, 결국 다른 사람이 만든 코드를 사용하는 데 좋은 가이드가 됨

+) 예외의 종류 & 예외에 대한 에러 메세지

  1. 예외의 종류

 

  • IndexError
    • 리스트의 인덱스 범위를 넘어갈 때 처리하는 예외
    • 코드를 작성하다 데이터가 150개인줄 알았는데. 151 개가 있어 처리를 요청하는 경우 IndexError가 호출됨
  • NameError
    • 코드에서 호출하는 특별한 변수명이 없을 때 호출되는 에러
    • 이 언어가 인터프리터언어이다 보니 존재하지 않은 변수도 실행 시점에서 잡아냄
    • 컴파일러 언어의 경우 실행 전이나 컴파일러 시점에 에러가 발생하는 것과는 대조적
  1. 예외에 대한 에러 메세지

사용 방법

  • except문의 마지막에 ‘as e’ 또는 ‘as 변수명’을 입력 → 해당 변수명을 출력
  • 사용 방법
for i in range(10):
		try:
			print(10 / i)
		except ZeroDivisionError as e:
			print(e)
			print('Not divided by 0')

 

try-except-else문

  • if-else 문과 비슷
  • 해당 예외가 발생하지 않는 경우 수행할 코드를 else문에 작성하면 됨
  • 기본 형태

 

  • 코드
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문 안에 있는 수행 코드가 아무런 문제 없이 종료되었을 경우 최종으로 호출하는 코드
  • for문에서 사용하는 finally문과 용도가 비슷
  • 기본 형식

 

  • 사용 예시
try:
		for i in ranged, 10):
			result =10 // i
			print(result)
except ZeroDivisionError:
			print("Not divided by 0")
finally:
		print("종료되었다.")

 

  • try문이 for문 밖에 선언되어 있고, 두가 1부터 시작
  • 사실상 ZeroDivision- Error가 발생할 수 없는 코드
  • 이러한 코드를 작성하면 except문은 실행되지 않고 마지 막으로 finally문만 실행
  • try-except-finally문도 for문에서 finally문을 사용하는 것 과 동일하게 예외 발생 여부와 상관없이 반드시 실행되는 코드

raise

  • 필요할 때 예외를 발생시키는 코드
  • while True문을 사용해 계속 반복문을 돌려야 하는 프로그램을 작성한다고 가정
    • 상대방 컴퓨터에 계속 무엇인가를 요청해야 하는 프로그램이고, 요청할 때마다 비용이 청구
    • 만약 상대방 컴퓨터가 고장나거나 문제가 생겨 사용하지 못하게 되는 상황이 발생한다면 어떻게 해야 할까?
      • 프 로그램을 작성할 때 상대방 컴퓨터에서 응답이 없다면 강제로 프로그램이 종료되도록 예외를 발생
  • 기본 형태

 

  • 사용 예시

 

  • 설명
    • while True문으로 반복문이 계속 돌아가는 상태에서 사용자에게 입력을 받음
    • 하지만 사용자가 입력한 값이 숫자가 아닌 경우에는 숫자값을 입력하지 않았다고 출 력하면서 프로그램을 종료하는 것을 목적으로 작성된 프로그램이
    • 이때, 에러의 종류는 ValueError로 사용자가 입력을 잘못했을 때 입력이 잘못된 것을 알려주면서 종료

assert문

  • 미리 알아야 할 예외 정보가 조건을 만족하지 않을 경우 예외를 발생
  • 앞에서 if문과 함께 raise문을 사용하여 강제로 예외를 발생
    • assert문 → 매우 간단하게 예외를 발생
  • True 또는 False의 반환이 가능한 함수를 사용
    • 만약 False가 반환되면 예외가 발생
  • 기본 형태

 

  • 사용 예시

 

  • 설명
    • 1행에서 get_binary_number() 함수를 통해 십진수를 입력받음
    • 하지만 함수를 사용하 는 사용자가 잘못된 인수argument, 예를 들어 문자열값을 입력할 수도 있음
    • 이를 방지하기 위해 2행에서 assert문을 사용
    • isinstance() 함수는 입력된 값이 다음에 나오는 클래스 의 인스턴스인지를 확인하는 함수
    • 이 코드에서 decimal_number 변수가 정수형 인지는 4〜 5행에서 확인할 수 있음
  • assert문은 코드를 작성할 때 잘못된 입력 여부를 사전에 확인하여 나중에 필요 없는 연산을 막아주고, 결국 다른 사람이 만든 코드를 사용하는 데 좋은 가이드가 됨 

 

#2. 파일 다루기

파일의 개념


  • 파일file은 컴퓨터를 실행할 때 가장 기본이 되는 단위
  • 프로그램을 실행하는 것은 늘 파일 을 실행하는 것
  • 하지만 일반적으로 윈도의 GUI 환경에서는 파일을 실행하는 것이 아니 라, [그림 12-2]와 같은 아이콘을 더블클릭하여 실행
  • 실제로는 아이콘 과 연결된 파일이 실행되는 구조
  • 아이콘에서 마우스 오른쪽 버튼을 클릭하고 [속성]을 선택하면 [그림 12-3]과 같은 화면을 볼 수 있음
  • 속성 화면에서 ‘대상’ 항목에 실행되는 파일의 경로가 있음
  • 이 경로를 그대로 복사하여 콘솔 창에 붙여넣고 실행하면 해당 프로그램이 실행됨
  • 모든 프로그램은 이렇게 파일이 있기 때 문에 실행되는 것
  • 단지 사용자가 편하게 쓰기 위해 간단한 아이콘을 만들어 사용할 뿐이 지, 그 이면에는 모두 파일이 숨어 있다고 할 수 있음

파일의 종류


  • 기본적으로 바이너리 파일binary file과 텍스트 파일text file, 두 가지로 분류 가능
  • 바이너리
    • 컴퓨터만 이해할 수 있는 이진 정보로 저장된 파일
    • 비트bit 형태로 저장되어 메모장으로 열면 내용이 보이지 않거나 내용을 확인할 수 없는 파일
    • 정보 효율적으로 저장하기 위해 파일 시스템 대부분은 이진 정보로 저장
      • 엑셀이나 워드 프로그램들이 모두 이진 정보로 저장된 이진 파일
  • 텍스트
    • 사람이 이해할 수 있는 문자열로 저장된 파일
    • 메모장으로 그 내용을 확인할 수 있음
    • 지금까지 작성한 파이썬 파일이나 HTML 코드 파일 등도 모두 텍스트 파알
    • 생각보다 많은 파일이 텍스트 파일로 저장

파일 읽기


  • 텍스트 파일을 다루기 위해 open() 함수를 사용
  • open() 함수와 파일명, 파일 열기 모드를 입력하면 그 옵션에 따라 파일을 다룰 수 있음
  • 파일을 여는 모드에는 읽기 모드, 쓰기 모드, 추가 모드 등이 존재
  • 파이썬에서는 상황에 따라 이러한 형식을 조합하여 파일을 다루게 됨
  • 파일 읽기
    • 파일 읽기 실행
  • 설명
    • 1행에서 open() 함수 다음에 파일명과 ‘r’을 입력해 파일에 대한 정보를 변수 f에 저장
      • 이를 일반적으로 파일 객체
    • 2행에서 변수 오를 이용해 read() 함수를 실행하면 해당 파일의 텍스트를 contents 변수에 문자열로 저장
    • 3행에서는 contents 변수의 내 용. 즉 ‘dream.txt’ 파일에 있는 텍스트를 화면에 출력
    • 4행에서는 마지막으로 close() 함수를 사용하여 파일을 종료
    • 때때로 텍스트 파일을 다룰 때 이미 수정하고 있는 파일을 다른 프로그램에서 동시에 호출하면 에러가 발생한
      • 이렇게 하나의 파이썬 프로그램이 하나의 파일을 사용할 때 사용을 완료하면 반드시 해당 파일을 종료해야 함

with문과 함께 사용

  • with문과 함께 open() 함수를 사용 가능
  • . with문은 들여쓰기를 하는 동안에는 open() 함수가 유지되고, 들여쓰기가 끝나면 open() 함수도 종료되는 방식
  • 차이점은 close() 함수를 명시적으로 쓰지 않아도 파일의 사용을 종료할 수 있다는 점
  • 특히 해당 파일 객체는 =로 할당하는 방식이 아니라 as문을 사용하여 변수명에 할당

 

한 줄씩 읽어 리스트혀으로 반환

  • 파일 전체의 텍스트를 문자열로 반환하는 read() 함수 대신. readlines() 함수를 사용하여 한 줄씩 내용을 읽어와 문자열 형태로 저장 가능
  • 한 줄의 기준은 \n 로 나뉘어지고 리스트로 반환될 때 for문 등 다양한 형태로 활용 가능

 

 

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

  • 실행할 때마다 차례대로 한 줄씩 읽어오는 함수인 readline()에 대해 알아보자.
  • 기존 read() 함수는 파일을 한 번 열 때 파일의 처음부터 끝까지 모든 파일의 내용을 읽어오는 함수이지만 readline() 함수는 호출될 때마다 한 줄씩 읽어오는 특징 존재

 

  • 설명
    • 3행에서 while 1로 코드가 항상 수행되도록 만든 다음, 4행의 line = my_file.readline()으로 한 줄씩 파일을 읽어들임
    • 만약 읽어온 줄에 내용이 없다면 5행 의 if not line: break 코드에 의해 반복문이 종료되어 파일 읽기를 종료
    • 하지만 파일 에 남은 내용이 있다면 while문이 계속 실행되면서 모든 코드를 다 읽어오게 됨
    • 파일의 내용을 찾다가 중간에 멈춰야 할 필요가 있는 대용량 데이터는 같은 코드를 많이 사용

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

  • 때로는 파일에 저장된 텍스트의 통계 정보를 읽어와야 할 때가 있음
  • 이를 위해 많이 사용하는 방법
    • 이미 배운 split() 함수와 len() 함수를 함께 사용하는 것
    • 파일에 저장된 모든 텍스트를 읽어온 후 차례대로 글자 수, 단어 수, 줄 수를 출력하는 프로그램

 

파일 쓰기


  • 파일에 무엇인가를 쓰기 위해서는 파일 열기 모드를 ‘W’로 설정하는 것과 함께 인코딩 encoding 이라는 개념을 알아야 함
  • 인코딩
    • 텍스트 파일을 저장하기 위해서는 저장할 때 사용하는 표준을 지 정해야 함
    • 인코딩 옵션 → 인코딩 표준을 지정할 수 있음
    • 일반적으로 인코딩은 UTF-8을 많이 사용
    • 파일을 윈도에서만 사용한다면 cp949도 사용가능
    • 운영체제나 파일의 사용 환경에 따라 다르게 설정해야 함

pickle 모듈


  • 파이썬 프로그램을 실행할 때 생성되는 여러 변수와 객체는 순간적으로 메모리에 로딩되었다 가 프로그램이 종료되면 사라짐
  • 하지만 때로는 이렇게 사용되는 객체를 저장시켜 놓고 필 요할 때 다시 불러야 하는 경우가 있음
  • 이 경우를 프로그래밍 언어에서는 영속화persistence라고 함
    • 간단히 표현하면 필요한 객체를 파일로 저장시켜 다시 사용할 수 있도록 하는 것
  • 파이썬은 pickle 모듈을 제공하여 메모리에 로딩된 객체를 영속화할 수 있도록 지원
  • 리 스트에 들어간 데이터나 클래스의 오브젝트 등을 파일로 저장시켜 나중에 다시 사용할 수 있 도록 해줌
  • 아직은 필요 없지만 저장해야 하는 정보가 많아지고 계산 결과를 저장하였다가 나중에 다시 불러 사용할 경우에도 요긴하게 쓸 수 있는 기능
  • pickle 모듈을 사용하기 위해서는 다음 코드와 같이 호출한 후 객체를 저장할 수 있는 파일을 열고 저장하고자 하는 객체를 넘기면dump 됨
  • 파일을 생성할 때는 ‘w’가 아닌 ‘Wb’로 열어야 하는데 여기서 B는 바이너리binary를 뜻하는 약자로 텍스트 파일이 아닌 바이너리 파일로 저장된다는 의미
  • dump() 함수에서는 저장할 객체, 저장될 파일 객체를 차례대로 인수 로 넣으면 해당 객체가 해당 파일에 저장됨
  • 저장된 pickle 파일을 불러오는 프로세스도 저장 프로세스와 같음
  • 먼저 list.pickle 파일 을 ‘rb’ 모드로 읽어온 후, 해당 파일 객체를 pickle 모듈을 사용하여 load() 함수로 불러오면 됨
  • 사실 pickle 객체를 불러올 때 해당 객체가 어떤 객체인지에 대한 정보가 전혀 없어 상당히 혼란스러울 때도 있지만, 해당 코드를 개발한 개발자라면 코드의 인터페이스를 정확히 알고 있으므로 어려움 없이 사용할 수 있음
  • 다음 파이썬 셸 코드는 앞에서 리스트 객체를 list.pickle 파일에 저장했기 때문에 해당 파일을 불러 사용할 때도 동일하게 리스트 객체가 반환된 것을 알 수 있음
  • pickle 모듈은 단순히 생성된 객체를 저장하는 기능도 있지만 사용자가 직접 생성한 클래스 객체도 저장
  • 다음 코드와 같이 곱셈을 처리하는 클래스를 생성한다고 가정
  • 이 코드의 클래스는 처음 객체를 생성할 때 초깃값을 생성하고, multiply() 함수를 부를 때마다 ‘초 깃값 * number’의 값을 호출하는 클래스
  • 일종의 곱셈 클래스라고 생각
  • 그러나 프로그램을 작성하다 보면 매우 복잡한 연산도 따로 저장하여 사용할 때가 있음
  • 이러한 저장 모듈을 효율적으로 사용하기 위해 다음 코드처럼 pickle 모듈을 사용할 수 있음