请帮我理解这个来自twisted.words msn示例的回溯信息

3 投票
2 回答
532 浏览
提问于 2025-04-15 13:27

我正在运行来自Twisted文档的一个示例,具体是关于msn协议的,链接在这里:http://twistedmatrix.com/projects/words/documentation/examples/msn_example.py

我知道在StackOverflow上有另一个关于这个示例.py的问题,但我遇到的情况完全不同。当我运行这个示例时,它的表现是正常的。成功登录了账户,并显示了好友列表中的用户信息,但在这之后,它却出现了这个错误追踪信息

> Traceback (most recent call last):  
> File
> "c:\python26\lib\site-packages\twisted\python\log.py",
> line 84, in callWithLogger
>     return callWithContext({"system": lp}, func, *args, **kw)   File
> "c:\python26\lib\site-packages\twisted\python\log.py",
> line 69, in callWithContext
>     return context.call({ILogContext: newCtx}, func, *args, **kw)   File
> "c:\python26\lib\site-packages\twisted\python\context.py",
> line 59, in callWithContext
>     return self.currentContext().callWithContext(ctx,
> func, *args, **kw)   File
> "c:\python26\lib\site-packages\twisted\python\context.py",
> line 37, in callWithContext
>     return func(*args,**kw)
> --- <exception caught here> ---   File "c:\python26\lib\site-packages\twisted\internet\selectreactor.py",
> line 146, in _doReadOrWrite
>     why = getattr(selectable, method)()   File
> "c:\python26\lib\site-packages\twisted\internet\tcp.py",
> line 463, in doRead
>     return self.protocol.dataReceived(data)  
> File
> "c:\python26\lib\site-packages\twisted\protocols\basic.py", line 239, indataReceived
>     return self.rawDataReceived(data)   File
> "c:\python26\lib\site-packages\twisted\words\protocols\msn.py",
> line 676 in rawDataReceived
>     self.gotMessage(m)   File "c:\python26\lib\site-packages\twisted\words\protocols\msn.py",
> line 699, in gotMessage
>     raise NotImplementedError exceptions.NotImplementedError:

有人能帮我理解这是什么意思吗?

2 个回答

0

这个方法 gotMessage 说是没有实现。这通常意味着你创建了一个子类,而这个子类需要你去重写 gotMessage 方法,但你却没有去做这个重写。

1

看起来这是MSN服务器操作方式的一个变化,虽然这不算是协议的改变。现在发生的事情是,MSN服务器在客户端连接后立即向客户端发送了一条消息,而Twisted words的示例代码并没有预料到这一点。

假设你正在运行来自http://twistedmatrix.com/projects/words/documentation/examples/的msn_example.py,你可以通过在示例代码中添加以下代码(在listSynchronized函数结束后)来让示例正常工作,并查看发生了什么:

def gotMessage(self, message):
    print message.headers
    print message.getMessage()

在做完这些修改后,如果你运行这个示例,你应该能看到以下内容:

...
2009-08-25 00:03:23-0700 [Notification,client] {'Content-Type': 'text/x-msmsgsinitialemailnotification; charset=UTF-8', 'MIME-Version': '1.0'}
2009-08-25 00:03:23-0700 [Notification,client] Inbox-Unread: 1
2009-08-25 00:03:23-0700 [Notification,client] Folders-Unread: 0
2009-08-25 00:03:23-0700 [Notification,client] Inbox-URL: /cgi-bin/HoTMaiL
2009-08-25 00:03:23-0700 [Notification,client] Folders-URL: /cgi-bin/folders
2009-08-25 00:03:23-0700 [Notification,client] Post-URL: http://www.hotmail.com
2009-08-25 00:03:23-0700 [Notification,client]

我们可以看到服务器向客户端发送了一条消息,说明该账户有多少封未读邮件。

希望这能帮到你!

撰写回答