[C++-sig] Strange boost python error message (and solution)
François Duranleau
duranlef at iro.umontreal.ca
Fri May 19 20:43:10 CEST 2006
On Thu, 18 May 2006, Allen Bierbaum wrote:
> I just ran into a very strange error message in boost python that took
> me all afternoon to track down. I thought I would post the error and
> the solution here to:
>
> a) help other people out if they run into the same problem
> b) see if anyone can tell me what is really going on behind the
> scenes and if there is a way for boost python to detect it
>
> I was getting an assertion in boost::python::converter::registery::insert
>
> python: boost/libs/python/build/../src/converter/registry.cpp:162:
> void boost::python::converter::registry::insert(PyObject* (*)(const
> void*), boost::python::type_info): Assertion `slot == 0' failed.
>
> I tracked it down to having two calls to
> boost::python::register_ptr_to_python< boost::shared_ptr< MyClass > >
> . As long as there is only one call like this in the module for a
> single class things are fine. The second call causes a problem.
>
> So can anyone that knows the details of boost.python internals explain
> what is happening here?
>
> My guess (and it is only a guess) is that the registration of a
> to_python conversion function is detecting that it has already been
> set and asserting.
As far as I can tell from my understanding of the source code, this is
right.
> If this is true, could the assertion be changed to
> something a little more descriptive like:
>
> assert((slot == 0) && "Attempted to register a to_python conversion
> function when one is already registered");
Sounds good. But also, would it be possible to detect if the same
to_python converter is get registered, and in such a case simply do
nothing and thus report no error?
--
François Duranleau
LIGUM, Université de Montréal
"Il n'existe ni caprices du sort, ni bizarreries, ni accidents. Il n'y a
que des choses que les humains ne comprennent pas. [...] Les humains ne
peuvent exister si tout ce qui est déplaisant est écarté au lieu d'être
compris."
- Cygne Royal, dans _Message des hommes vrais au monde mutant_
(de Marlo Morgan)
More information about the Cplusplus-sig
mailing list