ValueError: サポートされていない Pickle プロトコル: Python の 3
- Python での酸洗いと酸洗い解除
-
Python での
ValueError: unsupported pickle protocol: 3
の原因 -
Python の
ValueError: unsupported pickle protocol: 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 での 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)
出力:
ここで、文字列の前の u
は Unicode を表します。
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
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません