gh-130250: fix regression in traceback.print_last (#130318)

This commit is contained in:
Irit Katriel 2025-02-19 21:44:35 +00:00 committed by GitHub
parent 73801864d8
commit 6c982aeb54
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 16 additions and 8 deletions

View File

@ -115,14 +115,14 @@ Module-Level Functions
.. function:: print_exc(limit=None, file=None, chain=True)
This is a shorthand for ``print_exception(sys.exception(), limit, file,
chain)``.
This is a shorthand for ``print_exception(sys.exception(), limit=limit, file=file,
chain=chain)``.
.. function:: print_last(limit=None, file=None, chain=True)
This is a shorthand for ``print_exception(sys.last_exc, limit, file,
chain)``. In general it will work only after an exception has reached
This is a shorthand for ``print_exception(sys.last_exc, limit=limit, file=file,
chain=chain)``. In general it will work only after an exception has reached
an interactive prompt (see :data:`sys.last_exc`).

View File

@ -510,6 +510,13 @@ class TracebackCases(unittest.TestCase):
traceback.print_exception(Exception("projector"), file=output)
self.assertEqual(output.getvalue(), "Exception: projector\n")
def test_print_last(self):
self.assertIsNone(getattr(sys, "last_exc", None))
sys.last_exc = ValueError(42)
output = StringIO()
traceback.print_last(file=output)
self.assertEqual(output.getvalue(), "ValueError: 42\n")
def test_format_exception_exc(self):
e = Exception("projector")
output = traceback.format_exception(e)

View File

@ -204,7 +204,7 @@ def _safe_string(value, what, func=str):
# --
def print_exc(limit=None, file=None, chain=True):
"""Shorthand for 'print_exception(sys.exception(), limit, file, chain)'."""
"""Shorthand for 'print_exception(sys.exception(), limit=limit, file=file, chain=chain)'."""
print_exception(sys.exception(), limit=limit, file=file, chain=chain)
def format_exc(limit=None, chain=True):
@ -212,15 +212,15 @@ def format_exc(limit=None, chain=True):
return "".join(format_exception(sys.exception(), limit=limit, chain=chain))
def print_last(limit=None, file=None, chain=True):
"""This is a shorthand for 'print_exception(sys.last_exc, limit, file, chain)'."""
"""This is a shorthand for 'print_exception(sys.last_exc, limit=limit, file=file, chain=chain)'."""
if not hasattr(sys, "last_exc") and not hasattr(sys, "last_type"):
raise ValueError("no last exception")
if hasattr(sys, "last_exc"):
print_exception(sys.last_exc, limit, file, chain)
print_exception(sys.last_exc, limit=limit, file=file, chain=chain)
else:
print_exception(sys.last_type, sys.last_value, sys.last_traceback,
limit, file, chain)
limit=limit, file=file, chain=chain)
#

View File

@ -0,0 +1 @@
Fix regression in ``traceback.print_last()``.