diff options
Diffstat (limited to 'common/handle_error.cc')
-rw-r--r-- | common/handle_error.cc | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/common/handle_error.cc b/common/handle_error.cc index a06b5348..55ec75fb 100644 --- a/common/handle_error.cc +++ b/common/handle_error.cc @@ -1,11 +1,12 @@ -#include <boost/python.hpp> #include <Python.h> +#include <boost/python.hpp> namespace py = boost::python; // Parses the value of the active python exception // NOTE SHOULD NOT BE CALLED IF NO EXCEPTION -std::string parse_python_exception(){ +std::string parse_python_exception() +{ PyObject *type_ptr = NULL, *value_ptr = NULL, *traceback_ptr = NULL; // Fetch the exception info from the Python C API PyErr_Fetch(&type_ptr, &value_ptr, &traceback_ptr); @@ -13,30 +14,31 @@ std::string parse_python_exception(){ // Fallback error std::string ret("Unfetchable Python error"); // If the fetch got a type pointer, parse the type into the exception string - if(type_ptr != NULL){ + if (type_ptr != NULL) { py::handle<> h_type(type_ptr); py::str type_pstr(h_type); // Extract the string from the boost::python object py::extract<std::string> e_type_pstr(type_pstr); - // If a valid string extraction is available, use it + // If a valid string extraction is available, use it // otherwise use fallback - if(e_type_pstr.check()) + if (e_type_pstr.check()) ret = e_type_pstr(); else ret = "Unknown exception type"; } - // Do the same for the exception value (the stringification of the exception) - if(value_ptr != NULL){ + // Do the same for the exception value (the stringification of the + // exception) + if (value_ptr != NULL) { py::handle<> h_val(value_ptr); py::str a(h_val); py::extract<std::string> returned(a); - if(returned.check()) - ret += ": " + returned(); + if (returned.check()) + ret += ": " + returned(); else ret += std::string(": Unparseable Python error: "); } // Parse lines from the traceback using the Python traceback module - if(traceback_ptr != NULL){ + if (traceback_ptr != NULL) { py::handle<> h_tb(traceback_ptr); // Load the traceback module and the format_tb function py::object tb(py::import("traceback")); @@ -47,7 +49,7 @@ std::string parse_python_exception(){ py::object tb_str(py::str("\n").join(tb_list)); // Extract the string, check the extraction, and fallback in necessary py::extract<std::string> returned(tb_str); - if(returned.check()) + if (returned.check()) ret += ": " + returned(); else ret += std::string(": Unparseable Python traceback"); |