MCPcopy Create free account
hub / github.com/mhammond/pywin32 / ReportPythonError

Function ReportPythonError

win32/src/PythonService.cpp:1397–1433  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1395}
1396
1397static void ReportPythonError(DWORD code)
1398{
1399 if (PyErr_Occurred()) {
1400 LPTSTR inserts[4] = {NULL, NULL, NULL, NULL};
1401 PyObject *type, *value, *traceback;
1402 PyErr_Fetch(&type, &value, &traceback);
1403 TCHAR *szTracebackUse = L"<No memory!>"; // default.
1404 TCHAR *szTraceback = NULL; // to be freed.
1405 char *szmbTraceback = GetPythonTraceback(type, value, traceback);
1406 if (szmbTraceback) {
1407 int tb_len = strlen(szmbTraceback) + 1;
1408 szTraceback = (TCHAR *)malloc(sizeof(WCHAR) * tb_len);
1409 if (szTraceback) {
1410 szTracebackUse = szTraceback;
1411 MultiByteToWideChar(CP_ACP, 0, szmbTraceback, tb_len, szTraceback, tb_len);
1412 // trim crud from the end.
1413 if (tb_len>2) szTracebackUse[tb_len-2] = L'\0';
1414 }
1415 free(szmbTraceback);
1416 }
1417 inserts[0] = szTracebackUse;
1418 ReportError(code, (LPCTSTR *)inserts);
1419 if (szTraceback) free(szTraceback);
1420
1421 if (bServiceDebug) { // If debugging, restore for traceback print,
1422 PyErr_Restore(type, value, traceback);
1423 } else { // free em up.
1424 Py_XDECREF(type);
1425 Py_XDECREF(value);
1426 Py_XDECREF(traceback);
1427 }
1428 } else {
1429 LPCTSTR inserts[] = {L"<No Python Error!>", L"", L"", NULL};
1430 ReportError(code, inserts);
1431 }
1432 PyErr_Clear();
1433}
1434
1435// register the event source with the event log.
1436static void CheckRegisterEventSourceFile()

Callers 5

service_mainFunction · 0.85
dispatchServiceCtrlFunction · 0.85
LoadPythonServiceClassFunction · 0.85
_tmainFunction · 0.85

Calls 2

GetPythonTracebackFunction · 0.85
ReportErrorFunction · 0.85

Tested by

no test coverage detected