[PYTHON] Ein Sonderfall, bei dem Gurke einen Fehler verursacht

pickle ist eine Standardbibliothek zum Serialisieren von Python-Objekten in Bytes zur Speicherung in Dateien und dergleichen.

Welche Art von Objekt gebeizt werden kann, ist [Beizreferenz] Es gibt eine Beschreibung in (https://docs.python.org/3/library/pickle.html#what-can-be-pickled-and-unpickled), aber das Phänomen, dass Objekte, die aufeinander verweisen, nicht gut aufgehoben werden können Ich habe es überprüft und es scheint, dass ein ungelöstes Problem vorliegt, wie in This Issue Tracker beschrieben.

Wenn ich das folgende Skript ausführe und mit "pickle.loads" die Auswahl aufhebe, erhalte ich "AttributeError: Das Objekt" Node "hat kein Attribut" i ".

python


# modified from https://bugs.python.org/file2428/circle.py

import pickle

class Node(object):
    def __init__(self, i):
        self.i = i

    def __cmp__(self, other):
        return cmp(self.i, other.i)

    def __hash__(self):
        return hash(self.i)

n = Node(12)
n.next_nodes = set((n,))

byteobj = pickle.dumps(n)
unpickled = pickle.loads(byteobj)

Dieser Fehler tritt auf, weil das "n" des Knotenobjekts die folgenden Bedingungen erfüllt und Objekte, die diese Bedingungen erfüllen, möglicherweise nicht "pickle / unpickle" sind.

Dies ist ein Fehler, der 2007 gemeldet wurde, aber in Ichute Tracker ist dies ein seltener Fall und es ist schwierig, ihn zu beheben. Daher wurde er ohne Behebung erneut geöffnet und ist immer noch behoben Es scheint nicht so zu sein.

Recommended Posts

Ein Sonderfall, bei dem Gurke einen Fehler verursacht
[Hinweis] Die Lösung für die, bei der Python beim Importieren von Hashlib unter MacOSX zu einem Fehler wird
Ein Memorandum, wenn bei der Pip-Installation ein Fehler auftritt