summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_traceback.py11
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2023-10-16-12-12-48.gh-issue-110912.uEJGi_.rst2
-rw-r--r--Python/pythonrun.c5
3 files changed, 14 insertions, 4 deletions
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index 9bb1786..a0f7ad8 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -927,6 +927,17 @@ class TracebackErrorLocationCaretTestBase:
]
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()
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-10-16-12-12-48.gh-issue-110912.uEJGi_.rst b/Misc/NEWS.d/next/Core and Builtins/2023-10-16-12-12-48.gh-issue-110912.uEJGi_.rst
new file mode 100644
index 0000000..d70d45e
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2023-10-16-12-12-48.gh-issue-110912.uEJGi_.rst
@@ -0,0 +1,2 @@
+Correctly display the traceback for :exc:`MemoryError` exceptions using the
+:mod:`traceback` module. Patch by Pablo Galindo
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 7499429..b915c06 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -1031,6 +1031,7 @@ error:
void
_PyErr_Display(PyObject *file, PyObject *unused, PyObject *value, PyObject *tb)
{
+ assert(value != NULL);
assert(file != NULL && file != Py_None);
if (PyExceptionInstance_Check(value)
&& 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;
- if (!value || PyErr_GivenExceptionMatches(value, PyExc_MemoryError)) {
- goto fallback;
- }
-
// Try first with the stdlib traceback module
PyObject *traceback_module = PyImport_ImportModule("traceback");