来自 xtalk.py 的 Python-XMPP 回溯

Posted

技术标签:

【中文标题】来自 xtalk.py 的 Python-XMPP 回溯【英文标题】:Python-XMPP traceback from xtalk.py 【发布时间】:2014-05-02 13:36:07 【问题描述】:

我有 Ubuntu 12.10 和 Python 2.7,并且正在使用 python-xmpp 库 (xmpppy) 通过使用名为xsend.py的示例脚本,我可以连接到我的 XMPP 服务器 (ejabberd) 并向用户发送即时消息。

当我尝试使用测试脚本xtalk.py 时,我能够再次连接到 xmpp、auth 并发送消息。该脚本还应该允许我收到我正在向其发送消息的人的回复。

当我运行程序时,会发生这种情况:

root@domU:/home/ubuntu# python xtalk.py user@xmpp.mydomain.com
An error occurred while looking up _xmpp-client._tcp.xmpp.mydomain.com
connected with tls
authenticated using sasl
I am sending this message from xtalk.py to user@xmpp.mydomain.com
My message was recieved, and I'm sending another one now
That was recieved to. Now I'm going to reply to myself. 
Traceback (most recent call last):
  File "xtalk.py", line 77, in <module>
    cl.Process(1)
  File "/usr/lib/python2.7/dist-packages/xmpp/dispatcher.py", line 303, in dispatch
    handler['func'](session,stanza)
  File "xtalk.py", line 18, in xmpp_message
    sys.stdout.write(event.getBody() + '\n')
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

我不确定从哪里开始解决此问题。谁能给我小费?

具体情况是,我可以运行 xtalk.py 并向用户发送消息,但是一旦用户键入响应的第一个字母(使用 pigin 客户端),python 程序就会因该回溯而崩溃。

基本上,我可以使用此脚本发送消息,但无法接收回消息。我认为原因可能与 XMPP 通知该程序用户正在输入有关,因为直到我在 pigin 客户端中按下键以回复聊天时才会发生错误。如果我想回复“你好!”然后,只要我在 pigin 客户端上按 h,服务器上的 python 程序就会崩溃。我什至无法发送消息。

另外一个非常有趣的点:如果我在我的 android 上使用 Xabber 聊天客户端,我可以使用这个脚本进行两​​种方式的聊天。我只是不能用这个脚本和桌面 Pigin 客户端两种方式聊天......

【问题讨论】:

错误意味着event.getBody() 返回无 - 我不知道为什么您的活动中没有正文,但无论如何这是一个提示.. 【参考方案1】:

问题在于 xtalk.py 中的这些行:

    if type in ['message', 'chat', None] and fromjid == self.remotejid:
        sys.stdout.write(event.getBody() + '\n')

它假定消息节总是包含一个&lt;body&gt; 标记(它包含消息的实际文本)。这是不正确的:例如,typing notifications 作为不(总是)包含正文的消息发送。

您应该将这些行替换为:

    if type in ['message', 'chat', None] and fromjid == self.remotejid and event.getBody():
        sys.stdout.write(event.getBody() + '\n')

【讨论】:

非常感谢,我会试试的!

以上是关于来自 xtalk.py 的 Python-XMPP 回溯的主要内容,如果未能解决你的问题,请参考以下文章

python-xmpp 收到消息

连接期间的Python-xmpp HostUnknown错误

python-xmpp 并循环接收要接收的收件人列表和 IM 消息

如何使用 python-xmpp(和 gtalk)每 x 分钟向收件人发送一条消息?

python禁用错误输出

检查网络响应是来自服务器还是来自 Chrome 缓存