zoukankan      html  css  js  c++  java
  • amqp模块在python2.7.6版本上报错的问题

    机器的环境是python2.7.6;

    使用pip install安装了amqp.正常安装,未报错.

    amqp安装的版本是2.1.4.

    在python中,使用import amqp,报错如下:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python2.7/site-packages/amqp/__init__.py", line 45, in <module>
        from .basic_message import Message  # noqa
      File "/usr/local/lib/python2.7/site-packages/amqp/basic_message.py", line 29, in <module>
        from .serialization import GenericContent
      File "/usr/local/lib/python2.7/site-packages/amqp/serialization.py", line 31, in <module>
        from .exceptions import FrameSyntaxError
      File "/usr/local/lib/python2.7/site-packages/amqp/exceptions.py", line 298, in <module>
        _method_name
    TypeError: Struct() argument 1 must be string, not unicode
    

    百度和google了一些Struct() argument 1 must be string, not unicode相关的内容,稍微有用的是github上的讨论

    看到这个版本的代码的时候

    https://github.com/celery/py-amqp/commit/9167f6569e5f48fcb37e6eda8caf9ce81de2dc93  

    依葫芦画瓢,将相应地方的都改成了uncoded形式,即在字符串前面加u''.

    没有解决问题

    经过反复查阅,最后思考了一下,将前面报错的file打开看了一下,在298行_method_name前面一行是:

    METHOD_NAME_MAP[unpack('>I', pack('>HH', *_method_id))[0]] = 

    之前被我改成了unicode

    METHOD_NAME_MAP[unpack(u'>I', pack(u'>HH', *_method_id))[0]] = 

    因为github上就是这么改的嘛,完全没经过大脑就照搬了

    实际上,改成如下就可以了:

    METHOD_NAME_MAP[unpack(str('>I'), pack(str('>HH'), *_method_id))[0]] = 

    再次使用 import amqp就不会报错了

    回头想想,报错里面都说清楚了,需要一个string,照做就行了,但是不仔细思考,反复纠结unicode,走太多弯路.

    第一次遇到报错要去python库里面改源代码的,也是醉醉的,勉强记录一下吧.

  • 相关阅读:
    Servant:基于Web的IIS管理工具
    mono-3.4.0 源码安装时出现的问题 [do-install] Error 2 [install-pcl-targets] Error 1 解决方法
    使用 OWIN Self-Host ASP.NET Web API 2
    Xamarin和微软发起.NET基金会
    SQLite vs MySQL vs PostgreSQL:关系型数据库比较
    Mono 3.2.7发布,JIT和GC进一步改进
    如何使用Microsoft技术栈
    c#开源消息队列中间件EQueue 教程
    通过一组RESTful API暴露CQRS系统功能
    NEsper Nuget包
  • 原文地址:https://www.cnblogs.com/masako/p/7095665.html
Copyright © 2011-2022 走看看