2015-01-20 17:00 GMT+01:00 Omer Katz <omer.d...@gmail.com>:

> I tried to pass a bytearray and that's also not currently supported.
> Any clue about what should I do with the exception? It definitely
> shouldn't crash the process. I need it to raise a python exception instead.
>
The only way to prevent a crash is to add a "catch" block somehow in C++,
and I don't see anything like this in cppyy.
This said, it's probably a bad idea to continue something after what the
library calls a "FatalError"...
Better add a check like "if e.IsInitialized()" before calling
SerializeToString.



> בתאריך 20 בינו 2015 17:49, ‏"Amaury Forgeot d'Arc" <amaur...@gmail.com>
> כתב:
>
> 2015-01-20 16:07 GMT+01:00 Omer Katz <omer.d...@gmail.com>:
>>
>>> That's correct but can't we handle those cases in cppyy?
>>> We should provide a native Python interface whenever it's possible.
>>>
>>
>> It's not possible to take a Python string as mutable reference.
>>
>> Here are some options that cppyy could implement:
>>
>> - Use bytearray, which is mutable.
>>     a = bytearray()
>>     e.SerializeToString(a)
>>     s = str(a)
>>
>> - Pass a list, and expect the function to append a (python) string
>>     l = []
>>     e.SerializeToString(s)
>>     s = l[0]
>>
>> - Change the signature of the function so that it *returns* the string
>> (like swig's OUTPUT
>> <http://www.swig.org/Doc3.0/Arguments.html#Arguments_nn5>)
>>     result, s = e.SerializeToString()
>>
>> I don't know which method is the most convenient with cppyy.
>>
>>
>>
>>>
>>> 2015-01-20 15:40 GMT+02:00 Amaury Forgeot d'Arc <amaur...@gmail.com>:
>>>
>>>> Hi,
>>>>
>>>> 2015-01-20 14:14 GMT+01:00 Omer Katz <omer.d...@gmail.com>:
>>>>
>>>>> The documentation is unclear how you can pass a pointer to a Python
>>>>> variable e.g.:
>>>>> str = ""
>>>>>
>>>>> e.SerializeToString(str)
>>>>>
>>>>
>>>> Message::SerializeToString() updates its argument in-place, but Python
>>>> strings are not mutable.
>>>> You should allocate a std::string from Python code, and pass it to the
>>>> function.
>>>> Maybe something like:
>>>>
>>>> s = cppyy.gbl.std.string()
>>>> e.SerializeToString(s)
>>>> print s
>>>>
>>>>
>>>>
>>>>
>>>>>
>>>>> ---------------------------------------------------------------------------
>>>>> TypeError                                 Traceback (most recent call
>>>>> last)
>>>>> <ipython-input-7-993880892d74> in <module>()
>>>>> ----> 1 e.SerializeToString(str)
>>>>>
>>>>> TypeError: none of the 5 overloaded methods succeeded. Full details:
>>>>>   bool google::protobuf::MessageLite::SerializeToString(std::string*)
>>>>> =>
>>>>>     TypeError: cannot pass str as basic_string<char>
>>>>>   bool google::protobuf::MessageLite::SerializeToString(std::string*)
>>>>> =>
>>>>>     TypeError: cannot pass str as basic_string<char>
>>>>>   bool google::protobuf::MessageLite::SerializeToString(std::string*)
>>>>> =>
>>>>>     TypeError: cannot pass str as basic_string<char>
>>>>>   bool google::protobuf::MessageLite::SerializeToString(std::string*)
>>>>> =>
>>>>>     TypeError: cannot pass str as basic_string<char>
>>>>>   bool google::protobuf::MessageLite::SerializeToString(std::string*)
>>>>> =>
>>>>>     TypeError: cannot pass str as basic_string<char>
>>>>>
>>>>> Best Regards,
>>>>> Omer Katz.
>>>>>
>>>>> _______________________________________________
>>>>> pypy-dev mailing list
>>>>> pypy-dev@python.org
>>>>> https://mail.python.org/mailman/listinfo/pypy-dev
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Amaury Forgeot d'Arc
>>>>
>>>
>>
>>
>> --
>> Amaury Forgeot d'Arc
>>
>


-- 
Amaury Forgeot d'Arc
_______________________________________________
pypy-dev mailing list
pypy-dev@python.org
https://mail.python.org/mailman/listinfo/pypy-dev

Reply via email to