파일객체 (2) - 변수 상태 저장, 오류 제어문

송한솔·2023년 5월 25일
0

파이썬

목록 보기
12/16

파이썬 객체 저장(pickle)

  • 파이썬 파일은 한번 실행되고, 종료되면 다뤘던 변수의 값들이 모두 사라집니다.
  • 이때 변수 값들을 저장하고 불러오고 싶다면 pickle모듈을 사용합시다.
  • 선수 지식 : 파이썬 파일 객체(open,close)와 with문

pickle 실습

# 01_pickle.py

# WD 리셋
import os, pickle
os.chdir(os.path.dirname(__file__))
print(os.getcwd()) #현재 WD확인

# 데이터
classNumber = 5
member = ["사과", "바나나", "딸기"]
teacher = {
    "name" : "한솔",
    "lang" : "Python"
}

# pickle로 저장
save_data = [classNumber, member, teacher]
print(save_data)
# 텍스트형 데이터가 아닌 데이터들은 바이너리(b)로 기입해야 합니다.
with open("school_data.pickle", "wb") as fp:
    #pickle(모듈에서).dump(덮어씌우겠다)
    pickle.dump(save_data, fp)

코드를 실행하면 school_data.pickle가 생성되는것을 볼 수 있습니다.

이제 생성된 school_data.pickle를 열어보면

파일은 생성됬지만 읽을 수 없는 것을 확인할 수 있습니다.
이것을 읽기위해서는 pickle를 통해 load해야합니다.

# 02_load_pickle.py

# WD 리셋
import os, pickle
os.chdir(os.path.dirname(__file__))
print(os.getcwd()) #현재 WD확인

# pickle 가져오기
with open("school_data.pickle", "rb") as fp:
    load_date = pickle.load(fp)

print("해당 코드 실행 됨")
print(load_date)

오류 제어문

try..except..finally

  • try 영역에는 시도할 코드를 작성
  • except 영역에는 에러 발생시 대처할 코드를 작성
  • finally는 에러발생 유무와 상관없이 처리할 코드를 작성
  • try + except / try + finally / try + except + finally

if문과 비슷한 구조를 가졌습니다.

오류 제어문 예시1

# 03_try.pickle.py

# WD 리셋
import os, pickle
os.chdir(os.path.dirname(__file__))
print(os.getcwd()) #현재 WD확인

# pickle 가져오기
try:
    with open("school_data.pickle", "rb") as fp:
        load_date = pickle.load(fp)
except:
    load_date = [] # 오류가 출력되지 않도록 대체할 데이터를 넣음
finally:
    print("값 가져오기 실행 완료")

print("해당 코드 실행 됨")
print(load_date)

오류 제어문 예시2

try:
    print("시도 코드")
    n1 = int('3')
    n2 = int('3.0') # 오류
except ValueError:
    print("값 에러 발생시 실행되는 영역")
except TypeError:
    print("타입 에러 발생시 실행되는 영역")
except:
    print("그 외 에러 발생시 실행되는 영역")
finally:
    print("성공/실패 상관없이 무조건 실행되는 영역입니다.")

print(n1)

이런식으로 특정 오류마다 다른 코드를 작동시킬 수 있습니다.


전자 키트에서의 try문

  • 코드에서 뿐만이 아니라 기기의 상황에 따라 오류가 발생하는 경우가 있다.
    예 : 접합불량, 타 기능 처리중
  • 최대 시도횟수를 정하는 코드작성 가능
    예 : 각도를 50으로 팔을 움직여라
    -> 실패 -> 재시도 -> 실패 -> (이 과정을 최대 5번 반복)
    예시
# try를 이용한 최대 시도 횟수 코드
# if문과 비슷하지만 조건이 True/False인가? 오류 발생인가?

# 최대 시도 횟수 5번 제한 코드

age = -1
attemp = 0
while attemp < 5:
    attemp += 1
    try:
        age = int(input("나이를 입력해주세요(정수) : "))
        break
    except:
        print("올바른 값이 아닙니다. 시도횟수 : {}".format(attemp))

print("프로그램 종료")

0개의 댓글