ValueError: 지원되지 않는 Pickle 프로토콜: Python에서 3

Fariba Laiq 2024년2월15일
  1. Python에서 피클링 및 피클링 해제
  2. Python에서 ValueError: 지원되지 않는 피클 프로토콜: 3의 원인
  3. Python에서 ValueError: unsupported pickle protocol: 3 수정
ValueError: 지원되지 않는 Pickle 프로토콜: Python에서 3

모든 프로그래밍 언어에는 많은 오류가 발생합니다. 일부는 컴파일 타임에, 일부는 런타임에 발생합니다.

이 기사에서는 ValueError: 지원되지 않는 피클 프로토콜: 3에 대해 설명합니다.

Python에서 피클링 및 피클링 해제

Pickling은 파이썬 객체(list, dict 등)를 문자 스트림으로 바꾸는 방법입니다. 이 문자 스트림은 ‘Unpickling’이라는 역 프로세스를 사용하여 다른 Python 스크립트에서 객체를 재생성하는 데 필요한 모든 데이터를 포함해야 합니다.

pickle 모듈은 Python에서 피클링 및 피클링 해제를 수행합니다.

다음 코드에서는 목록을 피클 및 피클 해제했습니다. 이름 목록을 만들고 wb 모드를 사용하여 파일을 열었습니다.

w는 아직 존재하지 않는 경우 파일을 생성하고 b는 데이터(목록)를 바이트 스트림으로 파일에 기록합니다. 덤프할 목록과 데이터를 바이트 형식으로 쓸 파일 이름을 지정하는 dump() 메서드를 호출했습니다.

마찬가지로 rb 모드의 파일에서 먼저 데이터를 읽어서 데이터를 언피클링했습니다. load() 메서드를 사용하여 파일에서 바이트를 읽고 다시 목록 객체로 변환했습니다.

예제 코드:

# Python 3.x
import pickle

my_list = ["Jhon", "Alia", "Sam", "Chris"]
with open("my_file.txt", "wb") as f:
    pickle.dump(my_list, f)
my_file = open("my_file.txt", "rb")
data = pickle.load(my_file)
print(data)

출력(Anaconda의 Jupyter 노트북에서 실행):

Python 3에서 피클

Python에서 ValueError: 지원되지 않는 피클 프로토콜: 3의 원인

때로는 unpickling 과정에서 ValueError: unsupported pickle protocol: 3에 직면합니다. 이는 데이터 피클링 및 역피클링 중에 사용되는 호환되지 않는 피클 프로토콜 때문입니다.

Python 3은 프로토콜을 지정하지 않은 경우 데이터를 피클 및 피클 해제하기 위해 기본적으로 프로토콜 3을 도입하고 사용했습니다. 서로 다른 프로토콜을 사용하여 데이터를 피클 및 언피클하면 아래 코드와 같이 이 오류가 발생합니다.

Python 2는 기본적으로 프로토콜 0을 사용했고 Python 3은 프로토콜 3을 사용했습니다. 따라서 이 오류는 프로토콜 버전을 올바르게 지정하지 않고 다른 Python 버전에서 데이터를 피클 및 역피클할 때 주로 발생합니다.

예제 코드:

파이썬 3:

# Python 3.x
import pickle

my_list = ["Jhon", "Alia", "Sam", "Chris"]
with open("my_file.txt", "wb") as f:
    pickle.dump(my_list, f)

파이썬 2:

# Python 2.x
import pickle

my_file = open("my_file.txt", "rb")
data = pickle.load(my_file)
print(data)

출력:

지원되지 않는 피클 프로토콜 오류

Python에서 ValueError: unsupported pickle protocol: 3 수정

이 오류를 해결하려면 Python 2에서 이 데이터를 로드하기 위해 Python 3을 사용하여 데이터를 덤프할 때 3보다 작은 pickle 프로토콜을 지정해야 합니다. Python 2는 2보다 큰 프로토콜을 지원하지 않기 때문입니다.

예제 코드:

# Python 3.x
import pickle

my_list = ["Jhon", "Alia", "Sam", "Chris"]
with open("my_file.txt", "wb") as f:
    pickle.dump(my_list, f, protocol=2)

예제 코드:

# Python 2.x
import pickle

my_file = open("my_file.txt", "rb")
data = pickle.load(my_file)
print(data)

출력:

지원되지 않는 pickle 프로토콜 수정

여기서 문자열 앞의 u는 유니코드를 나타냅니다.

작가: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

관련 문장 - Python Error