comparison Python/errors.c @ 80189:a281604a5c9a

Issue #7317: Display full tracebacks when an error occurs asynchronously. Patch by Alon Horev with update by Alexey Kachayev.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Sat, 03 Nov 2012 15:56:05 +0200
parents 9fdec1354af4
children bb94f6222fef
comparison
equal deleted inserted replaced
80188:70cef0a160cf 80189:a281604a5c9a
796 _Py_IDENTIFIER(__module__); 796 _Py_IDENTIFIER(__module__);
797 PyObject *f, *t, *v, *tb; 797 PyObject *f, *t, *v, *tb;
798 PyErr_Fetch(&t, &v, &tb); 798 PyErr_Fetch(&t, &v, &tb);
799 f = PySys_GetObject("stderr"); 799 f = PySys_GetObject("stderr");
800 if (f != NULL && f != Py_None) { 800 if (f != NULL && f != Py_None) {
801 PyFile_WriteString("Exception ", f); 801 if (obj) {
802 PyFile_WriteString("Exception ignored in: ", f);
803 PyFile_WriteObject(obj, f, 0);
804 PyFile_WriteString("\n", f);
805 }
806 PyTraceBack_Print(tb, f);
802 if (t) { 807 if (t) {
803 PyObject* moduleName; 808 PyObject* moduleName;
804 char* className; 809 char* className;
805 assert(PyExceptionClass_Check(t)); 810 assert(PyExceptionClass_Check(t));
806 className = PyExceptionClass_Name(t); 811 className = PyExceptionClass_Name(t);
826 PyFile_WriteString("<unknown>", f); 831 PyFile_WriteString("<unknown>", f);
827 else 832 else
828 PyFile_WriteString(className, f); 833 PyFile_WriteString(className, f);
829 if (v && v != Py_None) { 834 if (v && v != Py_None) {
830 PyFile_WriteString(": ", f); 835 PyFile_WriteString(": ", f);
831 PyFile_WriteObject(v, f, 0); 836 PyFile_WriteObject(v, f, Py_PRINT_RAW);
832 } 837 }
838 PyFile_WriteString("\n", f);
833 Py_XDECREF(moduleName); 839 Py_XDECREF(moduleName);
834 } 840 }
835 if (obj) {
836 PyFile_WriteString(" in ", f);
837 PyFile_WriteObject(obj, f, 0);
838 }
839 PyFile_WriteString(" ignored\n", f);
840 PyErr_Clear(); /* Just in case */ 841 PyErr_Clear(); /* Just in case */
841 } 842 }
842 Py_XDECREF(t); 843 Py_XDECREF(t);
843 Py_XDECREF(v); 844 Py_XDECREF(v);
844 Py_XDECREF(tb); 845 Py_XDECREF(tb);