ValueError: サポートされていない Pickle プロトコル: Python の 3

Fariba Laiq 2024年2月15日
  1. Python での酸洗いと酸洗い解除
  2. Python での ValueError: unsupported pickle protocol: 3 の原因
  3. Python の ValueError: unsupported pickle protocol: 3 を修正
ValueError: サポートされていない Pickle プロトコル: Python の 3

どのプログラミング言語でも、多くのエラーが発生します。 コンパイル時に発生するものもあれば、実行時に発生するものもあります。

この記事では、ValueError: サポートされていない pickle プロトコル: 3 について説明します。

Python での酸洗いと酸洗い解除

Pickling は、Python のオブジェクト (list や dict など) を文字列にするメソッドです。 この文字ストリームには、Unpicklingと呼ばれる逆のプロセスを使用して別の Python スクリプトでオブジェクトを再作成するために必要なすべてのデータが含まれているはずです。

pickle モジュールは、Python で酸洗いと酸洗解除を行います。

次のコードでは、リストを pickle 化および unpickle しました。 名前のリストを作成し、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 Notebook で実行):

python 3 のピクル

Python での ValueError: unsupported pickle protocol: 3 の原因

unpickle の過程で、ValueError: unsupported pickle protocol: 3 に直面することがあります。 これは、データの pickle 化および unpickle 中に使用される pickle プロトコルに互換性がないためです。

Python 3 では、プロトコルを指定しない場合にデータをピクルおよびアンピクルするために、デフォルトでプロトコル 3 が導入および使用されました。 異なるプロトコルを使用してデータをピクルおよびアンピクルすると、次のコードに示すように、このエラーが発生します。

Python 2 はデフォルトでプロトコル 0 を使用し、Python 3 はプロトコル 3 を使用しました。したがって、このエラーは、プロトコル バージョンを正しく指定せずに異なる Python バージョンでデータを pickle および unpickle するときに主に直面します。

コード例:

パイソン 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 3 を使用してデータをダンプしてこのデータを Python 2 にロードするときに、ピクル プロトコルを 3 未満に指定する必要があります。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 は Unicode を表します。

著者: 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