Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:使用rabbitmq发布时不可损坏的类型_Python_Python 2.7_Rabbitmq - Fatal编程技术网

Python TypeError:使用rabbitmq发布时不可损坏的类型

Python TypeError:使用rabbitmq发布时不可损坏的类型,python,python-2.7,rabbitmq,Python,Python 2.7,Rabbitmq,我试图通过pika将python字典传递给rabbitmq队列,这可能是python的问题,而不是rabbitmq本身。我收到一个如上所述的错误,下面是我的代码: def PingAddScan(deviceID, ipAddress, deviceHistory, item, date, apiURL, browserConId): if PingDevice(deviceID, ipAddress): BasicScan(ipAddress, deviceID, it

我试图通过pika将python字典传递给rabbitmq队列,这可能是python的问题,而不是rabbitmq本身。我收到一个如上所述的错误,下面是我的代码:

def PingAddScan(deviceID, ipAddress, deviceHistory, item, date, apiURL, browserConId):
    if PingDevice(deviceID, ipAddress):
        BasicScan(ipAddress, deviceID, item, apiURL)
        deviceHistory[deviceID] = date

        # After the basic scan we are going to need to push a message back to the user to say
        # that the pathfinder has successfully found the device, and it should prompt the user
        # what he wants to scan
        print browserConId + " : " + deviceID
        channelOutbound.queue_declare(queue='outboundMessaging', durable=True)
        message = {"browserConnectionID": browserConId, "data": "FOUND", "deviceID": deviceID}
        print str(message)
        channelOutbound.basic_publish(exchange='messaging',
                              routing_key='outbound',
                              body=message)
下面是完整的堆栈跟踪:

    Traceback (most recent call last):
  File "pathfinderAllocator.py", line 454, in <module>
    channel.start_consuming()
  File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 1755, in start_consuming
    self.connection.process_data_events(time_limit=None)
  File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 715, in process_data_events
    self._dispatch_channel_events()
  File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 518, in _dispatch_channel_events
    impl_channel._get_cookie()._dispatch_events()
  File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 1384, in _dispatch_events
    evt.body)
  File "pathfinderAllocator.py", line 439, in callback
    PingAddScan(deviceID, ipAddress, deviceHistory, new_device, date, data, browser_connectionid)
  File "pathfinderAllocator.py", line 337, in PingAddScan
    body=message)
  File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 2052, in basic_publish
    mandatory, immediate)
  File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 2138, in publish
    immediate=immediate)
  File "/usr/local/lib/python2.7/site-packages/pika/channel.py", line 421, in basic_publish
    (properties, body))
  File "/usr/local/lib/python2.7/site-packages/pika/channel.py", line 1324, in _send_method
    self.connection._send_method(self.channel_number, method, content)
  File "/usr/local/lib/python2.7/site-packages/pika/connection.py", line 2137, in _send_method
    self._send_message(channel_number, method, content)
  File "/usr/local/lib/python2.7/site-packages/pika/connection.py", line 2164, in _send_message
    content[1][start:end]).marshal())
TypeError: unhashable type
回溯(最近一次呼叫最后一次):
文件“pathfinderAllocator.py”,第454行,在
channel.start_consuming()
文件“/usr/local/lib/python2.7/site packages/pika/adapters/blocking_connection.py”,第1755行,在start_中
self.connection.process\u data\u事件(时间限制=无)
文件“/usr/local/lib/python2.7/site packages/pika/adapters/blocking_connection.py”,第715行,进程中数据事件
自我发布频道事件()
文件“/usr/local/lib/python2.7/site packages/pika/adapters/blocking_connection.py”,第518行,在调度通道事件中
impl\u channel.\u get\u cookie()。\u dispatch\u events()
文件“/usr/local/lib/python2.7/site packages/pika/adapters/blocking_connection.py”,第1384行,in_dispatch_events
evt(车身)
回调中第439行的文件“pathfinderAllocator.py”
PingAddScan(设备ID、IP地址、设备历史记录、新设备、日期、数据、浏览器连接ID)
PingAddScan中第337行的文件“pathfinderAllocator.py”
正文=消息)
文件“/usr/local/lib/python2.7/site packages/pika/adapters/blocking_connection.py”,第2052行,在basic_publish中
强制性,即时性)
文件“/usr/local/lib/python2.7/site packages/pika/adapters/blocking_connection.py”,第2138行,在publish中
立即的(立即的)
文件“/usr/local/lib/python2.7/site packages/pika/channel.py”,第421行,在basic_publish中
(财产、身体)
文件“/usr/local/lib/python2.7/site packages/pika/channel.py”,第1324行,采用发送方法
self.connection.\u发送方法(self.channel\u编号、方法、内容)
文件“/usr/local/lib/python2.7/site packages/pika/connection.py”,第2137行,在发送方法中
发送消息(频道号、方法、内容)
文件“/usr/local/lib/python2.7/site packages/pika/connection.py”,第2164行,在发送消息中
内容[1][开始:结束]。封送()
TypeError:不可损坏的类型

看起来与最后一行
basic\u publish
有关。这些类型错误通常发生在某些可变的东西(例如列表)用作字典键时。嗨,Moon,我只使用字符串作为字典键,并且值也是RabbitMQ中的字符串
body
,MQ是二进制数据,因此您需要将dict转换为字符串作为
import json;dumps(yourdict)
或者您可以对其进行pickle。看起来与最后一行
basic\u publish
有关。这些类型错误通常发生在某些可变的东西(例如列表)用作字典键时。嗨,Moon,我只使用字符串作为字典键,并且值也是RabbitMQ中的字符串
body
,MQ是二进制数据,因此您需要将dict转换为字符串作为
import json;dumps(yourdict)
或者您可以对其进行pickle。