0

我正在尝试将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在我调查该功能是否存在问题之前,我是否可以知道我所做的事情是否存在根本性的问题。

4

1 回答 1

1

repr不保证eval能够。相反,您应该序列化对象pickle,它是为对象序列化和反序列化而设计的。像这样:

import cPickle
cjs = cPickle.dumps(myCJ)
cj = cPickle.loads(cjs)

在这种情况下,CookieJar返回的表示不是远程有效的 Python 语法。如果您绝对必须处理这种语法,您可以尝试

cookielist = eval(cjs[ len('<cookielib.CookieJar') : -len('>') ])

提取 cookie 列表,然后从中创建一个 CookieJar。但我不能保证这会奏效。

于 2014-12-17T04:56:53.337 回答