xpat error in xmlrp client. How to inspect data.

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Mar 30 06:36:52 CEST 2010

En Thu, 25 Mar 2010 05:31:05 -0300, News123 <news1234 at free.fr> escribió:

> I'm havign a small xmlrpc client, which works normally fine.
> (xmlrpc via https)
> Sometimes however I receive an Exception about an expat error.
> The output, that I receive is:
>   File "C:\mycode\myrpcclient.py", line 63, in upload_chunk
>     rslt = myrpcclient.call()
>   File "C:\Python26\lib\xmlrpclib.py", line 1199, in __call__
>     return self.__send(self.__name, args)
>   File "C:\Python26\lib\xmlrpclib.py", line 1489, in __request
>     verbose=self.__verbose
>   File "C:\Python26\lib\xmlrpclib.py", line 1253, in request
>     return self._parse_response(h.getfile(), sock)
>   File "C:\Python26\lib\xmlrpclib.py", line 1387, in _parse_response
>     p.feed(response)
>   File "C:\Python26\lib\xmlrpclib.py", line 601, in feed
>     self._parser.Parse(data, 0)
> ExpatError: syntax error: line 1, column 0
> In order to continue debugging I'd like to dump the received http data,
> which "C:\Python26\lib\xmlrpclib.py", line 601 tried to parse without
> succes.
> How can I do this?

a) Use the standard cgitb module (despite its name, it is useful outside  
CGI scripts)

b) Use the tb module available from http://pypi.python.org/pypi/tb

Both provide a more verbose traceback, including local variables at each  
execution frame.

c) Replace ("monkey-patch") the feed() method with a more debug-friendly  

def feed(self, data):
     self._parser.Parse(data, 0)
   except xmlrpclib.expat.ExpatError, e:
     e.args += (data,)

xmlrpclib.ExpatParser.feed = feed

(Or perhaps set e.data = data)

d) In your exception handler, walk the traceback object until you reach  
the feed() call, and inspect the corresponding tb_frame.f_locals  

Gabriel Genellina

More information about the Python-list mailing list