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