本文摘自php中文网,作者零下一度,侵删。
机器的环境是python2.7.6;使用pip install安装了amqp.正常安装,未报错.
amqp安装的版本是2.1.4.
在python中,使用import amqp,报错如下:
1 2 3 4 5 6 7 8 9 10 11 | 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
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前面一行是:
1 | METHOD_NAME_MAP[unpack( '>I' , pack( '>HH' , *_method_id))[0]] = \
|
之前被我改成了unicode
1 | METHOD_NAME_MAP[unpack(u '>I' , pack(u '>HH' , * _method_id))[ 0 ]] = \
|
因为github上就是这么改的嘛,完全没经过大脑就照搬了
实际上,改成如下就可以了:
1 | METHOD_NAME_MAP[unpack( str ( '>I' ), pack( str ( '>HH' ), * _method_id))[ 0 ]] = \
|
再次使用 import amqp就不会报错了
回头想想,报错里面都说清楚了,需要一个string,照做就行了,但是不仔细思考,反复纠结unicode,走太多弯路.
第一次遇到报错要去python库里面改源代码的,也是醉醉的,勉强记录一下吧.
以上就是amqp模块在python2.7.6上报错怎么解决?的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
怎么把文件一行行读入数组
Python如何整段注释
Python映射类型的相关介绍
一文读懂Python的输入和输出
Python程序的运行过程如何理解?
Python如何遍历列表所有元素?
Python怎么下载库
Python如何爬取百度云连接方法指导
什么是进程(process)?什么是线程?
Python的def是什么意思
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » amqp模块在python2.7.6上报错怎么解决?