A feature request, and, Re: [C++-sig] Re: Exception translation to python classes
Lijun Qin
qinlj at solidshare.com
Tue Sep 23 03:17:03 CEST 2003
Hi,
I have the same problem several days ago, and I have found that Python (at
least 2.2) need the exception class derived (directly or indirectly) from
the standard "PyExc_Exception" class, so to use the ideal
PyErr_SetObject(PyExc_MyException, InstanceOfMyException)
-or in python-
raise mymodule.MyException(arg1, arg2)
form of code, you need to use the PyErr_NewException() API to create a new
exception class derived from PyExc_Exception class. And to create '__init__'
and '__str__' function, you also need to create two method object for two
callable object. I have managed to make it work, but it need a lot of
handcraft.
I this process, I have found that if boost.python can support specifing an
existing Python class as base class (or one of the basses), such as specify
'PyExc_Excetion' as the base class of the generated python class, it'll be a
much simpler life for us.
Lijun Qin
http://www.solidshare.com
----- Original Message -----
From: "Niall Douglas" <s_sourceforge at nedprod.com>
To: <c++-sig at python.org>
Sent: Tuesday, September 23, 2003 7:16 AM
Subject: Re: [C++-sig] Re: Exception translation to python classes
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 22 Sep 2003 at 12:50, Mike Rovner wrote:
>
> > Niall Douglas wrote:
> >
> > > I was wondering if anyone had any experience or could point me to
> > > some example code for translating C++ exceptions by using
> > > PyErr_SetObject to the Boost.Python wrap of the appropriate C++
> > > exception object.
> >
> > I'm not quite sure what are you talking about.
>
> Ok, an example then:
>
> FXException is my generic base class for all exceptions. It has
> bindings for Python ie; a FXException is available there too.
>
> I've registered an exception translator for FXException. If what you
> say below is correct, then it merely needs to be:
>
> void FXException_translator(const FXException &e)
> {
> PyErr_SetObject(PyExc_RuntimeError, python::object(e));
> }
>
> ... and all should be good.
>
> If so, then my thanks again. This makes error reporting in python
> much more useful indeed as my exception class provides a stack
> backtrace plus line and file info of the C++ side.
>
> Cheers,
> Niall
>
>
>
>
>
> -----BEGIN PGP SIGNATURE-----
> Version: idw's PGP-Frontend 4.9.6.1 / 9-2003 + PGP 8.0.2
>
> iQA/AwUBP2+Cy8EcvDLFGKbPEQKZPQCggXJIiovsg+j3r71fRKJ2FvmCZOEAn2GH
> bUFfXBN3Ju7JJVNIyxUOZt04
> =BGwZ
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
>
More information about the Cplusplus-sig
mailing list