从xtalk.py进行Python XMPP回溯

从xtalk.py进行Python XMPP回溯,python,ubuntu,xmpp,xmpppy,Python,Ubuntu,Xmpp,Xmpppy,我有带Python2.7的Ubuntu12.10,正在使用PythonXMPP库(xmpppy) 我能够连接到我的XMPP服务器(ejabberd),并使用名为 当我尝试使用测试脚本时,我能够再次连接到xmpp、auth并发送消息。这个脚本还应该允许我从发送消息的人那里收到回复 当我运行程序时,会发生以下情况: root@domU:/home/ubuntu# python xtalk.py user@xmpp.mydomain.com An error occurred while lookin

我有带Python2.7的Ubuntu12.10,正在使用PythonXMPP库(xmpppy) 我能够连接到我的XMPP服务器(ejabberd),并使用名为

当我尝试使用测试脚本时,我能够再次连接到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'
root@domU:/home/ubuntu#python xtalk.pyuser@xmpp.mydomain.com
查找_xmpp-client._tcp.xmpp.mydomain.com时出错
与tls连接
使用sasl进行身份验证
我将此消息从xtalk.py发送到user@xmpp.mydomain.com
我的消息已收到,现在我正在发送另一条消息
那是我收到的。现在我要回答我自己。
回溯(最近一次呼叫最后一次):
文件“xtalk.py”,第77行,在
cl.工艺(1)
文件“/usr/lib/python2.7/dist packages/xmpp/dispatcher.py”,第303行,在dispatch中
处理程序['func'](会话,节)
xmpp_消息中第18行的文件“xtalk.py”
sys.stdout.write(event.getBody()+'\n')
TypeError:不支持+:“NoneType”和“str”的操作数类型
我不知道从哪里开始解决这个问题。有人能给我小费吗

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

基本上,我可以用这个脚本发送消息,但不能接收它们。我认为原因可能与XMPP通知该程序用户正在键入有关,因为只有在我按下pigin客户端中的按键以回复聊天时才会发生错误。如果我想用“Hello!”来回答,那么只要我在pigin客户端上按h,服务器上的python程序就会崩溃。我甚至都没法发信息


还有一点非常有趣:如果我在android上使用Xabber聊天客户端,我可以使用这个脚本进行双向聊天。我无法与此脚本和桌面Pigin客户端双向聊天…

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

    if type in ['message', 'chat', None] and fromjid == self.remotejid:
        sys.stdout.write(event.getBody() + '\n')
它假定消息节始终包含
标记(包含消息的实际文本)。但事实并非如此:例如,发送的消息不(总是)包含正文

您应该将这些行替换为以下内容:

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

这个错误意味着
event.getBody()
不返回任何内容-我不知道为什么您的事件中没有body,但这是一个提示..非常感谢,我将尝试!