您好,欢迎访问一九零五行业门户网

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上的讨论
看到这个版本的代码的时候
依葫芦画瓢,将相应地方的都改成了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库里面改源代码的,也是醉醉的,勉强记录一下吧.
以上就是amqp模块在python2.7.6上报错怎么解决?的详细内容。
其它类似信息

推荐信息