我试图将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函数是否存在问题之前,我可以知道我正在做的事情是否有根本的错误。
发布于 2014-12-17 04:56:53
不能保证repr能够eval。您应该通过pickle序列化对象,这是为对象序列化和反序列化而设计的。就像这样:
import cPickle
cjs = cPickle.dumps(myCJ)
cj = cPickle.loads(cjs)在这种情况下,CookieJar返回的表示形式不是远程有效的Python语法。如果您一定要处理这个语法,您可以尝试
cookielist = eval(cjs[ len('<cookielib.CookieJar') : -len('>') ])若要提取cookie列表,请从其中创建一个CookieJar。但我不能保证这会奏效。
https://stackoverflow.com/questions/27518562
复制相似问题