Raf,我只能说,Egads!文档肯定不清楚!我已经使用 Python 多年了,这个简单的 Stack Overflow 问题,我认为在开始一天的实际工作之前我会很快解决这个问题,我花了 20 多分钟来回答这个问题。 :-)
首先:事实证明“Cookie”库和“cookielib”库是完全独立的,彼此没有任何关系。文档中对此进行了说明,但您必须向下滚动到每个文档页面的“另请参阅”部分才能找到它。如果它位于每个页面的顶部,将会很有帮助。
因此,当您将“Cookie”库中的对象传递到“cookielib”时,您会混淆“cookielib”内部结构,因为它将 cookie 存储在字典中,并且“Cookie”cookie 看起来像 - 你猜怎么着! — 一个字典,因此“cookielib”将其混淆为它自己的内部数据结构之一,并将其他 cookie 保存在其中。结果我得到的错误是:
<type 'exceptions.AttributeError'>: 'str' object has no attribute 'discard'
args = ("'str' object has no attribute 'discard'",)
message = "'str' object has no attribute 'discard'"
实际上,这是我在在 Cookie.Cookie 对象上粘贴一堆不属于那里的属性之后得到的错误,但是我在意识到自己陷入绝望之前添加了这些属性尝试使 Cookie.Cookie 表现得像 cookielib.Cookie 的任务。 :-) 早期的错误都是属性缺失错误,例如:
<class 'Cookie.CookieError'>: Invalid Attribute name
args = ('Invalid Attribute name',)
message = 'Invalid Attribute name'
(我将错误放在这里,以防将来某个可怜的灵魂混淆了 Cookie 类并进行了我刚刚进行的 Google 搜索,但没有一个结果显示我遇到的错误!)
所以在我们继续之前,我必须知道:您是否试图像一个网络服务器一样,将 cookie 传递给客户端,并试图在客户端发送下一个请求时将它们原封不动地恢复原样,在这种情况下,我应该向您展示“Cookie”模块是如何工作的?或者您正在编写一个 Web 客户端,用于测试或娱乐,它与它通过 Web 请求发送到网站的 cookie 混淆,在这种情况下我们应该讨论“cookielib”?