机器的环境是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库里面改源代码的,也是醉醉的,勉强记录一下吧.

最新文章

  1. ABP理论学习之导航(Navigation)
  2. jshzoi
  3. Lua 之数据结构
  4. HighchartsJS创建点状带标识的图表实例
  5. 如何获取并分析L2CAP包
  6. c# 重载运算符(+-|&amp;)和扩展方法
  7. 李洪强iOS开发之使用CycleScrollView实现轮播图
  8. MyGeneration 默认设置中没有数据库驱动
  9. WndProc函数(转)
  10. 14.18.1 The InnoDB Recovery Process InnoDB 恢复进程:
  11. linux 通过pid寻找程序路径的最简单命令
  12. 做一个360度看车的效果玩玩(web)
  13. ajax-javascript原生-初步入门01(整理)
  14. SimpleMarkdown - 一款简单的Markdown编辑器
  15. python之list
  16. JavaScript—offset、client、scroll
  17. Linux编程 15 文件权限(用户管理 useradd,userdel,usermod,passwd,chpasswd,chsh, chfn,chage)
  18. javascript之传输加密
  19. Elasticsearch常用配置及性能参数[转]
  20. electron 创建右键菜单

热门文章

  1. back propogation 的线代描述
  2. [GO]方法的继承
  3. HDU 1104 Remainder (BFS求最小步数 打印路径)
  4. ettercap dns_spoof
  5. C++学习--第一个程序
  6. android在更新ADT以后报java.lang.NoClassDefFound的解决办法
  7. @cms_content_list
  8. 在ie6下将png24图片透明
  9. C++构造和析构的顺序
  10. Android 虚拟机访问本地服务器的地址