asyncore: python2.3 vs python2.4

Hector Miuler Malpica Gallegos miuler en gmail.com
Sab Ago 13 17:37:34 CEST 2005


Hola amigos, me acabo de dar una sorpresa al intentar correr un programa que 
tengo en python, lo había echo en python2.3 y cuando trate de correrlo en 
python2.4 me salio el siguiente error.


server.py
Traceback (most recent call last):
File "./flamingo_server.py", line 100, in ?
server = ServerFlamingo(1728)
File "./flamingo_server.py", line 72, in __init__
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
File "/usr/lib/python2.4/asyncore.py", line 261, in create_socket
self.add_channel()
File "/usr/lib/python2.4/asyncore.py", line 244, in add_channel
map = self._map
File "/usr/lib/python2.4/asyncore.py", line 366, in __getattr__
return getattr(self.socket, attr)
AttributeError: '_socketobject' object has no attribute '_map'


por lo que decidi hacer un diff :
gvim -d /usr/lib/python2.4/asyncore.py /usr/lib/python2.3/asyncore.py


y encuentro la siguiente diferencia:

python2.3 ==============================================
def del_channel(self, map=None):
fd = self._fileno
if map is None:
map = socket_map
if map.has_key(fd):
#self.log_info('closing channel %d:%s' % (fd, self))
del map[fd]
python2.3 ==============================================

python2.4 ==============================================
def del_channel(self, map=None):
fd = self._fileno
if map is None:
map = self._map
if map.has_key(fd):
#self.log_info('closing channel %d:%s' % (fd, self))
del map[fd]
self._fileno = None
python2.4 ==============================================

mientras que python2.3 usa "map = socket_map" en python 2.4 usa "map = 
self._map", self._map ha sido declarado en "def __init__(self):" en mi 
duplicación yo ponía mi propio __init__(self): esto funcionaba bien, pero en 
python2.4 NO!, si yo hubiera querido crear mi duplicación desde cero en 
python2.4 hubiera tenido un gran dolor de cabeza porque no me hubiera 
funcionado los ejemplos que encontré en la red, 
bueno lo solucione poniendo en mi __init__(self): 
asyncore.dispatcher.__init__(self), antes de mi código, solo quería 
mencionarlo para que alguien mas no tenga problemas con esto.


-- 
_\|/_
(O-O)
--oOO-(_)-OOo----------------------------------------
Hector Miuler Malpica Gallegos
Universidad Nacional del Callao - Peru
Escuela de Ingenieria Electronica

Jabber miuler en jabber.org
usuario registrado #308608




Más información sobre la lista de distribución Python-es