amqp模組在python2.7.6版本上報錯的問題

來源:互聯網
上載者:User

標籤:cep   沒有   需要   rac   from   使用   error   ring   問題   

機器的環境是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_nameTypeError: 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庫裡面改原始碼的,也是醉醉的,勉強記錄一下吧.

 

amqp模組在python2.7.6版本上報錯的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.