https://github.com/python/cpython/commit/6c982aeb547528174f8bc843267f584d8b133d14
commit: 6c982aeb547528174f8bc843267f584d8b133d14
branch: main
author: Irit Katriel <[email protected]>
committer: iritkatriel <[email protected]>
date: 2025-02-19T21:44:35Z
summary:
gh-130250: fix regression in traceback.print_last (#130318)
files:
A Misc/NEWS.d/next/Library/2025-02-19-19-29-19.gh-issue-130250.T00tql.rst
M Doc/library/traceback.rst
M Lib/test/test_traceback.py
M Lib/traceback.py
diff --git a/Doc/library/traceback.rst b/Doc/library/traceback.rst
index 7e05144bfb34cb..3475b014634d58 100644
--- a/Doc/library/traceback.rst
+++ b/Doc/library/traceback.rst
@@ -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`).
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index c2b115b53889d3..58f28902686a17 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -510,6 +510,13 @@ def test_print_exception_exc(self):
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)
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 2b402dd4cc2401..38ea5b4bdccf6d 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -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)
#
diff --git
a/Misc/NEWS.d/next/Library/2025-02-19-19-29-19.gh-issue-130250.T00tql.rst
b/Misc/NEWS.d/next/Library/2025-02-19-19-29-19.gh-issue-130250.T00tql.rst
new file mode 100644
index 00000000000000..10ffb9dc1ee6a1
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-02-19-19-29-19.gh-issue-130250.T00tql.rst
@@ -0,0 +1 @@
+Fix regression in ``traceback.print_last()``.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]