where is the PyString_AsString in Python 3.0?


B

BigHand

Guys:
I know that there is no PyString_AsString in Python3.0,
could you guys give me instruction about how can I do with the
following ?

PyObject *exc_type = NULL, *exc_value = NULL, *exc_tb = NULL;
PyErr_Fetch(&exc_type, &exc_value, &exc_tb);

how do I transfer the exc_type in a char* ?

thanks in advance!.

B.R.
BH.
 
Ad

Advertisements

B

Benjamin Peterson

BigHand said:
Guys:
I know that there is no PyString_AsString in Python3.0,
could you guys give me instruction about how can I do with the
following ?

There is no PyString_AsString. Everything string is unicode now. (PyUnicode API)
 
B

BigHand

BigHand <heweiwei <at> gmail.com> writes:




There is no PyString_AsString. Everything string is unicode now. (PyUnicode API)
hello,Ben,
could you give me an example? I almost know the PyUnicode API,but the
docs of 3.0 is too brief for me.

B.R.
BH
 
B

Benjamin Peterson

BigHand said:
hello,Ben,
could you give me an example? I almost know the
PyUnicode API,but the
docs of 3.0 is too brief for me.

PyString_FromString -> PyUnicode_FromString
PyString_Concat -> PyUnicode_Concat
etc...

To get a char * you have to explicitly encode the string with
PyUnicode_AsEncodedString.
 
B

BigHand

PyString_FromString -> PyUnicode_FromString
PyString_Concat -> PyUnicode_Concat
etc...

To get a char * you have to explicitly encode the string with
PyUnicode_AsEncodedString.

thanks Ben!
 
B

BigHand

thanks Ben!

Finally I got the results now. This did take me 10 hours to solve
this. the docs of 3.0......
I hope this could help someone else:

PyObject *exc_type = NULL, *exc_value = NULL, *exc_tb = NULL;
PyErr_Fetch(&exc_type, &exc_value, &exc_tb);
PyObject* str_exc_type = PyObject_Repr(exc_type); //Now a unicode
object
PyObject* pyStr = PyUnicode_AsEncodedString(str_exc_type, "utf-8",
"Error ~");
const char *strExcType = PyBytes_AS_STRING(pyStr);
Py_XDECREF(str_exc_type);
Py_XDECREF(pyStr);

Py_XDECREF(exc_type);
Py_XDECREF(exc_value);
Py_XDECREF(exc_tb);
 
Ad

Advertisements

B

Benjamin Peterson

BigHand said:
Finally I got the results now. This did take me 10 hours to solve
this. the docs of 3.0......
I hope this could help someone else:
const char *strExcType = PyBytes_AS_STRING(pyStr);
Py_XDECREF(str_exc_type);
Py_XDECREF(pyStr);

You can't Py_DECREF() pyStr while holding on to strExcType because
PyBytes_AS_STRING just yields a reference to the internal contents of the object.
 
S

Stefan Behnel

BigHand said:
I know that there is no PyString_AsString in Python3.0,
could you guys give me instruction about how can I do with the
following ?

PyObject *exc_type = NULL, *exc_value = NULL, *exc_tb = NULL;
PyErr_Fetch(&exc_type, &exc_value, &exc_tb);

how do I transfer the exc_type in a char* ?

Are you sure you want the exc_type and not the exc_value? The only major
thing I'd do with the type of an exception is to let Python check for it
using PyErr_ExceptionMatches().

Stefan
 
Ad

Advertisements

S

Stefan Behnel

BigHand said:
Finally I got the results now. This did take me 10 hours to solve
this. the docs of 3.0......

You will have to get used to Unicode. The code you used against the C-API
mimics almost exactly the steps you'd use at the Python level.

Stefan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top