mirror of https://github.com/python/cpython
bpo-43950: ensure source_line is present when specialising the traceback (GH-27313)
This commit is contained in:
parent
a22b05da87
commit
c8362314cc
|
@ -121,6 +121,31 @@ class TracebackCases(unittest.TestCase):
|
|||
finally:
|
||||
unlink(TESTFN)
|
||||
|
||||
def test_recursion_error_during_traceback(self):
|
||||
code = textwrap.dedent("""
|
||||
import sys
|
||||
from weakref import ref
|
||||
|
||||
sys.setrecursionlimit(15)
|
||||
|
||||
def f():
|
||||
ref(lambda: 0, [])
|
||||
f()
|
||||
|
||||
try:
|
||||
f()
|
||||
except RecursionError:
|
||||
pass
|
||||
""")
|
||||
try:
|
||||
with open(TESTFN, 'w') as f:
|
||||
f.write(code)
|
||||
|
||||
rc, _, _ = assert_python_ok(TESTFN)
|
||||
self.assertEqual(rc, 0)
|
||||
finally:
|
||||
unlink(TESTFN)
|
||||
|
||||
def test_bad_indentation(self):
|
||||
err = self.get_exception_format(self.syntax_error_bad_indentation,
|
||||
IndentationError)
|
||||
|
|
|
@ -699,11 +699,11 @@ tb_displayline(PyTracebackObject* tb, PyObject *f, PyObject *filename, int linen
|
|||
Py_DECREF(line);
|
||||
if (err != 0)
|
||||
return err;
|
||||
|
||||
int truncation = _TRACEBACK_SOURCE_LINE_INDENT;
|
||||
PyObject* source_line = NULL;
|
||||
|
||||
if (_Py_DisplaySourceLine(f, filename, lineno, _TRACEBACK_SOURCE_LINE_INDENT,
|
||||
&truncation, &source_line) != 0) {
|
||||
&truncation, &source_line) != 0 || !source_line) {
|
||||
/* ignore errors since we can't report them, can we? */
|
||||
err = ignore_source_errors();
|
||||
goto done;
|
||||
|
|
Loading…
Reference in New Issue