If I do (e.g.)
IOError: [Errno 2] No such file or directory: '/snafu/fnord'
(2, 'No such file or directory', '/snafu/fnord')
I think that Python exceptions are printed by running "str()" on the exception instance, which will return the formatted string you're interested in. You can get this from C by calling the
PyObject_Str() method described here:
Update: I'm a bit confused why the second element being returned to you by
PyErr_Fetch() is a string. My guess is that you are receiving an "unnormalized exception" and need to call
PyErr_NormalizeException() to turn that tuple into a "real" Exception that can format itself as a string like you want it to.