amqp模块在python2.7.6上报错怎么解决?


本文摘自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  # 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前面一行是:

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》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...