[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [xml] using "raise" in Python error handler callbacks
- From: Daniel Veillard <veillard redhat com>
- To: Stefan Seefeld <seefeld sympatico ca>
- Cc: xml gnome org
- Subject: Re: [xml] using "raise" in Python error handler callbacks
- Date: Tue, 5 Apr 2005 16:48:28 -0400
On Tue, Apr 05, 2005 at 12:40:01PM -0400, Stefan Seefeld wrote:
> Daniel Veillard wrote:
>
> >>The 'PyErr_Occurred()' function will return 1 since the (python) error
> >>callback raised an exception that was not yet dealt with.
> >>With the above hack, the example of the OP indeed generates a stack trace
> >>(a TypeError as the string in the 'raise' expression is malformed).
> >>
> >>However, things are more complex than that, since xmlTextReaderRead will
> >>potentially call the (python) callback multiple times, erasing the
> >>exception
> >>state from former calls.
> >>Right now libxml2 seems to assume that (error) callbacks can't fail
> >>themselfs.
> >>I'm not sure whether there is anything to do here.
> >
> >
> > So PyErr_Occurred() check should be done when C call python at the,
> >return point, right ?
> >I think this occurs only in a few places within python/libxml.c which is
> >not autogenerated. So hacking this might be possible.
>
> Fine ! Though I would use some kind of polymorphism to provide this
> functionality to any language binding, not just python. What about
> setting up some global (but protected) variable (akin to an internal
> 'errno')
> that callback wrappers may use to indicate failure ?
I'm objecting to this because global variables then generate the question
of what happens when multiple threads raise errors, etc ... Unless there
is a clear need at the library level I would keep this a Python only
thing.
> Make this a 'void *' normally set to 'NULL', and then abort the normal
> processing if it is != NULL. Wrapper code may then tunnel any data through
> it.
and what happens when 2 threads use libxml2 python bindings. Parsing of A
fails because parsing of B generated and error. No this is more complex than
that, really.
Daniel
--
Daniel Veillard | Red Hat Desktop team http://redhat.com/
veillard redhat com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]