我正在尝试将cookielib.CookieJar.__repr__()
输出反序列化回CookieJar对象。我做了:
cjs = repr(myCJ)
cj = eval(cjs)
它给了SyntaxError: invalid syntax
。 cjs
字符串长度超过3,000个字符,上面的第二个语句给出了以下实际输出:
>>> cjx=eval(cjs)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
<cookielib.CookieJar[Cookie(version=0, name='AMAuthCookie', value=' ....
...........lots deleted....and next is the actual last line...
comment=None, comment_url=None, rest={}, rfc2109=False)]>
^
SyntaxError: invalid syntax
我怀疑^字符指向repr字符串的第一个字符,其中前几个字符是:
>>> cjs[:50]
"<cookielib.CookieJar[Cookie(version=0, name='AMAut"
在我调查repr
函数是否给出问题之前,我是否知道我所做的事情是否存在根本性的错误。
答案 0 :(得分:1)
repr
无法保证eval
能够使用pickle
。您应该通过import cPickle
cjs = cPickle.dumps(myCJ)
cj = cPickle.loads(cjs)
序列化对象,这是为对象序列化和反序列化而设计的。像这样:
CookieJar
在这种情况下,cookielist = eval(cjs[ len('<cookielib.CookieJar') : -len('>') ])
给出的表示不是远程有效的Python语法。如果您绝对必须处理此语法,您可以尝试
{{1}}
提取出cookie列表,然后从中创建一个CookieJar。但我不能保证这会奏效。