mirror of https://github.com/python/cpython
gh-110912: Correctly display tracebacks for MemoryError exceptions using the traceback module (#110921)
This commit is contained in:
parent
bad7a35055
commit
b3c9faf056
|
@ -927,6 +927,17 @@ class TracebackErrorLocationCaretTestBase:
|
||||||
]
|
]
|
||||||
self.assertEqual(actual, expected)
|
self.assertEqual(actual, expected)
|
||||||
|
|
||||||
|
def test_memory_error(self):
|
||||||
|
def f():
|
||||||
|
raise MemoryError()
|
||||||
|
|
||||||
|
actual = self.get_exception(f)
|
||||||
|
expected = ['Traceback (most recent call last):',
|
||||||
|
f' File "{__file__}", line {self.callable_line}, in get_exception',
|
||||||
|
' callable()',
|
||||||
|
f' File "{__file__}", line {f.__code__.co_firstlineno + 1}, in f',
|
||||||
|
' raise MemoryError()']
|
||||||
|
self.assertEqual(actual, expected)
|
||||||
|
|
||||||
|
|
||||||
@requires_debug_ranges()
|
@requires_debug_ranges()
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Correctly display the traceback for :exc:`MemoryError` exceptions using the
|
||||||
|
:mod:`traceback` module. Patch by Pablo Galindo
|
|
@ -1031,6 +1031,7 @@ error:
|
||||||
void
|
void
|
||||||
_PyErr_Display(PyObject *file, PyObject *unused, PyObject *value, PyObject *tb)
|
_PyErr_Display(PyObject *file, PyObject *unused, PyObject *value, PyObject *tb)
|
||||||
{
|
{
|
||||||
|
assert(value != NULL);
|
||||||
assert(file != NULL && file != Py_None);
|
assert(file != NULL && file != Py_None);
|
||||||
if (PyExceptionInstance_Check(value)
|
if (PyExceptionInstance_Check(value)
|
||||||
&& tb != NULL && PyTraceBack_Check(tb)) {
|
&& tb != NULL && PyTraceBack_Check(tb)) {
|
||||||
|
@ -1047,10 +1048,6 @@ _PyErr_Display(PyObject *file, PyObject *unused, PyObject *value, PyObject *tb)
|
||||||
|
|
||||||
int unhandled_keyboard_interrupt = _PyRuntime.signals.unhandled_keyboard_interrupt;
|
int unhandled_keyboard_interrupt = _PyRuntime.signals.unhandled_keyboard_interrupt;
|
||||||
|
|
||||||
if (!value || PyErr_GivenExceptionMatches(value, PyExc_MemoryError)) {
|
|
||||||
goto fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try first with the stdlib traceback module
|
// Try first with the stdlib traceback module
|
||||||
PyObject *traceback_module = PyImport_ImportModule("traceback");
|
PyObject *traceback_module = PyImport_ImportModule("traceback");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue