ImportError: Никакой модуль, названный рассолом copy_reg

Это зависит от ситуации. Если вы проверяете что-то, что может быть или не определено глобально вне вашего кода (например, jQuery), вы хотите:

if (typeof(jQuery) != "undefined")

(Нет необходимости строгого равенства там, typeof всегда возвращает строку .) Но если у вас есть аргументы функции, которая может быть или не быть передана, они всегда будут определены, но null, если они опущены.

function sayHello(name) {
    if (name) return "Hello, " + name;
    else return "Hello unknown person";
}
sayHello(); // => "Hello unknown person"
20
задан Stephen Edmonds 17 February 2009 в 12:30
поделиться

3 ответа

Кажется, что это могло бы быть вызвано моим методом экспорта соленого объекта.

Этот отчет об ошибках , кажется, предполагает, что мой вопрос может быть решен путем экспорта в файл, записанный в режиме двоичного счета. Я собираюсь дать этому движение теперь и видеть, решает ли это мою проблему.

ОБНОВЛЕНИЕ: Это работает. Решение состоит в том, чтобы удостовериться, что Вы экспортируете свой соленый объект в файл, открытый в режиме двоичного счета даже при использовании протокола 0 по умолчанию (обычно называемый как являющийся "текстом")

Правильный код на основе orignal рассматриваемого примера:

file = open("test.txt", 'wb')
thing = {'a': 1, 'b':2}
cPickle.dump(thing, file)
23
ответ дан 29 November 2019 в 23:33
поделиться

Кроме того, простой запуск dos2unix (под linux) над (созданным Windows) файлом pickle решил эту проблему для меня. (Не пробовал вещь с открытым режимом 'wb'.) Dan

15
ответ дан 29 November 2019 в 23:33
поделиться

просто интерактивный сеанс Python, чтобы показать, что вам не нужен какой-либо конкретный код для решения этой проблемы:

сделайте что-нибудь подобное на машине Windows

Python 2.4.1 (#65, Mar 30 2005, 09:13:57) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pickle, re
>>> empty_string = re.compile("^$")
>>> pickle.dump([empty_string,1,1.23,'abc'], file('m:/mario/test-b.dump','wb'))
>>> pickle.dump([empty_string,1,1.23,'abc'], file('m:/mario/test-t.dump','wt'))
>>> 

, а затем попробуйте получить данные из окна linux

Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) 
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pickle
>>> pickle.load(file('/home/mario/.gvfs/transfer on 192.168.0.4/mario/test-b.dump'))
/usr/lib/python2.6/pickle.py:1124: DeprecationWarning: The sre module is deprecated, please import re.
  __import__(module)
[<_sre.SRE_Pattern object at 0xb7d42420>, 1, 1.23, 'abc']
>>> pickle.load(file('/home/mario/.gvfs/transfer on 192.168.0.4/mario/test-t.dump'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/pickle.py", line 1370, in load
    return Unpickler(file).load()
  File "/usr/lib/python2.6/pickle.py", line 858, in load
    dispatch[key](self)
  File "/usr/lib/python2.6/pickle.py", line 1090, in load_global
    klass = self.find_class(module, name)
  File "/usr/lib/python2.6/pickle.py", line 1124, in find_class
    __import__(module)
ImportError: No module named sre
>>> 

сообщение об ошибке может быть еще более запутанным, если вы просто обрабатываете базовые типы. вот что я получаю со списком [12, 1.2, ''] :

ValueError: insecure string pickle
3
ответ дан 29 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

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