Асинхронная обработка данных с помощью Python 3 - PullRequest
1 голос
/ 08 июля 2011

Я использую asynchat и пытаюсь использовать python3.получаю эту ошибку:

    error: uncaptured python exception, closing channel <irc.IRC connected
    at 0x9a5286c> (<class 'AttributeError'>:'str' object has no attribute 
    'more' [/usr/lib/python3.2/asyncore.py|write|89] [/usr/lib/python3.2
    /asyncore.py|handle_write_event|462] [/usr/lib/python3.2asynchat.py|
    handle_write|194] [/usr/lib/python3.2/asynchat.py|initiate_send|245])

Мой код работал нормально с Python 2.6.7.

Предложения, пожалуйста?

ОБНОВЛЕНИЕ: Я проверил, что я действительно использую asynchat Python3.

    ~$ python3
    Python 3.2 (r32:88445, Mar 25 2011, 19:28:28) 
    [GCC 4.5.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import asynchat
    >>> asynchat
    <module 'asynchat' from '/usr/lib/python3.2/asynchat.py'>
    >>> 

Ответы [ 2 ]

3 голосов
/ 29 декабря 2011

за http://bugs.python.org/issue12523

На самом деле, ошибка в том, что в Python 3 вы должны использовать байтовые объекты при передаче / получении данных по сети, а не (Unicode) строки. То есть замените '\ r \ n' на b '\ r \ n' и т. Д.

Конечно, сообщение об ошибке следует сделать менее темным.

1 голос
/ 09 июля 2011

Ошибка, кажется, возникает в /usr/lib/python3.2/asynchat.py|initiate_send|245.

def initiate_send(self):
    while self.producer_fifo and self.connected:
        first = self.producer_fifo[0]
        ...
        try:
            data = buffer(first, 0, obs)
        except TypeError:
            data = first.more() <--- here 

Похоже, кто-то поместил строку в self.producer_fifo вместо asyncchat.simple_producer, который является единственным классом в async*.py с методом more().

...