使用 msn 协议运行 twisted.words 示例时出现问题

Posted

技术标签:

【中文标题】使用 msn 协议运行 twisted.words 示例时出现问题【英文标题】:Problem running twisted.words example using msn protocol 【发布时间】:2009-04-25 13:16:29 【问题描述】:

我目前正在尝试使用 Twisted 库专门使用扭曲的单词来尝试与 MSN 交互。但是,当我运行 twisted 提供的示例脚本时,我得到一个错误。具体来说,错误在这里找到http://i42.tinypic.com/wl945w.jpg。该脚本可以在这里找到http://twistedmatrix.com/projects/words/documentation/examples/msn_example.py。

平台是带有 Python 2.6 的 Vista

编辑:完整输出:

Email (passport): mypassport@hotmail.com
Password: ******
2009-04-25 10:52:49-0300 [-] Log opened.
2009-04-25 10:52:49-0300 [-] Starting factory <twisted.internet.protocol.ClientFactory instance at 0x9d87e8c>
2009-04-25 10:52:55-0300 [Dispatch,client] Starting factory <twisted.words.protocols.msn.NotificationFactory instance at 0x9e28bcc>
2009-04-25 10:52:55-0300 [Dispatch,client] Stopping factory <twisted.internet.protocol.ClientFactory instance at 0x9d87e8c>
2009-04-25 10:52:55-0300 [Notification,client] Unhandled Error
    Traceback (most recent call last):
      File "/usr/local/lib/python2.5/site-packages/twisted/python/log.py", line 84, in callWithLogger
        return callWithContext("system": lp, func, *args, **kw)
      File "/usr/local/lib/python2.5/site-packages/twisted/python/log.py", line 69, in callWithContext
        return context.call(ILogContext: newCtx, func, *args, **kw)
      File "/usr/local/lib/python2.5/site-packages/twisted/python/context.py", line 59, in callWithContext
        return self.currentContext().callWithContext(ctx, func, *args, **kw)
      File "/usr/local/lib/python2.5/site-packages/twisted/python/context.py", line 37, in callWithContext
        return func(*args,**kw)
    --- <exception caught here> ---
      File "/usr/local/lib/python2.5/site-packages/twisted/internet/selectreactor.py", line 146, in _doReadOrWrite
        why = getattr(selectable, method)()
      File "/usr/local/lib/python2.5/site-packages/twisted/internet/tcp.py", line 460, in doRead
        return self.protocol.dataReceived(data)
      File "/usr/local/lib/python2.5/site-packages/twisted/protocols/basic.py", line 238, in dataReceived
        why = self.lineReceived(line)
      File "/usr/local/lib/python2.5/site-packages/twisted/words/protocols/msn.py", line 651, in lineReceived
        handler(params.split())
      File "/usr/local/lib/python2.5/site-packages/twisted/words/protocols/msn.py", line 827, in handle_USR
        d = _login(f.userHandle, f.password, f.passportServer, authData=params[3])
      File "/usr/local/lib/python2.5/site-packages/twisted/words/protocols/msn.py", line 182, in _login
        reactor.connectSSL(_parsePrimitiveHost(nexusServer)[0], 443, fac, ClientContextFactory())
    exceptions.TypeError: 'NoneType' object is not callable

2009-04-25 10:52:55-0300 [Notification,client] Stopping factory <twisted.words.protocols.msn.NotificationFactory instance at 0x9e28bcc>

【问题讨论】:

【参考方案1】:

由于 MSN 涉及 SSL 连接,您必须安装 pyOpenSSL 才能使用它。好像你可能不知道。不过,这不是 Twisted 报告这种缺失依赖项的好方法。我建议在 Twisted 问题跟踪器中提交请求以改进此报告。

【讨论】:

【参考方案2】:

发生了什么

当您尝试调用 None 的对象时,您会遇到此异常。看看这个:

>>> a = str
>>> a() # it's ok, a string is a callable class
''
>>> a = None
>>> a() # it fails, None a special Singleton not meant to be called

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    a()
TypeError: 'NoneType' object is not callable

你能做什么

你猜不出来,所以你需要做一些调试。

显然,最后一行 (refactor.connectSSL...) 包含三个对象调用,其中一个对象是 None。

如果你不喜欢调试器,你可以做的第一件事是获取行的每个元素并在它之前添加:

assert object1 is None 
assert object2 is None

然后您将获得异常的来源。之后,检查为什么这个对象设置为无。您可能必须检查文档以查看在哪种情况下某些可能已初始化它的方法返回 None。

愿原力...

【讨论】:

以上是关于使用 msn 协议运行 twisted.words 示例时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

如何完全从原始 XML 创建 twisted.words.xish.domish.Element

如何在 google talk 中使用 wokkel:(error twisted.words.protocols.jabber.sasl.SASLNoAcceptableMechanism)

在 WSGI 容器中使用扭曲的词

MSN邮箱的服务器信息,发送邮件(SMTP)与接收邮件(POP3)如何设置?

扭曲的连接丢失事件

IM通讯协议总结之三SIMPLE协议