Несоление классов из Python 3 в Python 2

Попробуйте это:

:%s/^\(.*\)\(\n\1\)\+$/\1/

Это ищет любую строку, сразу сопровождаемую одной или несколькими копиями себя, и заменяет его единственной копией.

Делают копию Вашего файла хотя перед попыткой его. Это не тестируется.

6
задан agf 28 September 2011 в 18:21
поделиться

1 ответ

Это проблема Python 3675 . Эта ошибка фактически исправлена ​​в Python 3.11.

Если мы импортируем:

from lib2to3.fixes.fix_imports import MAPPING

MAPPING сопоставляет имена Python 2 с именами Python 3. Мы хотим сделать это наоборот.

REVERSE_MAPPING={}
for key,val in MAPPING.items():
    REVERSE_MAPPING[val]=key

Мы можем переопределить Unpickler и load

class Python_3_Unpickler(pickle.Unpickler):
    """Class for pickling objects from Python 3"""
    def find_class(self,module,name):
        if module in REVERSE_MAPPING:
            module=REVERSE_MAPPING[module]
        __import__(module)
        mod = sys.modules[module]
        klass = getattr(mod, name)
        return klass

def loads(str):
    file = pickle.StringIO(str)
    return Python_3_Unpickler(file).load()  

Затем мы вызываем это load вместо pickle.loads.

Это должно решить проблему.

14
ответ дан 8 December 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: