summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIrit Katriel <iritkatriel@yahoo.com>2021-02-23 14:58:47 (GMT)
committerGitHub <noreply@github.com>2021-02-23 14:58:47 (GMT)
commit26f18b8540b49d592af66361f8df1a03953d1768 (patch)
treeb66c33940549691dfb3d35d560e20ce79dc8cb96
parent7bb1cafa4e3d648669212ea4c6d11d6eafc6da23 (diff)
downloadcpython-26f18b8540b49d592af66361f8df1a03953d1768.zip
cpython-26f18b8540b49d592af66361f8df1a03953d1768.tar.gz
cpython-26f18b8540b49d592af66361f8df1a03953d1768.tar.bz2
bpo-43146: fix regression in traceback.print_exception(None) (GH-24463)
-rw-r--r--Lib/test/test_traceback.py18
-rw-r--r--Lib/traceback.py4
-rw-r--r--Misc/NEWS.d/next/Library/2021-02-06-21-21-35.bpo-43146.MHtb2v.rst1
3 files changed, 22 insertions, 1 deletions
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index 33bdda0..2261ea9 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -232,6 +232,24 @@ class TracebackCases(unittest.TestCase):
output = traceback.format_exception_only(Exception("projector"))
self.assertEqual(output, ["Exception: projector\n"])
+ def test_exception_is_None(self):
+ NONE_EXC_STRING = 'NoneType: None\n'
+ excfile = StringIO()
+ traceback.print_exception(None, None, None, file=excfile)
+ self.assertEqual(excfile.getvalue(), NONE_EXC_STRING)
+
+ excfile = StringIO()
+ traceback.print_exc(None, file=excfile)
+ self.assertEqual(excfile.getvalue(), NONE_EXC_STRING)
+
+ self.assertEqual(traceback.format_exc(None), NONE_EXC_STRING)
+ self.assertEqual(
+ traceback.format_exception(None, None, None), [NONE_EXC_STRING])
+ self.assertEqual(
+ traceback.format_exception_only(None), [NONE_EXC_STRING])
+ self.assertEqual(
+ traceback.format_exception_only(None, None), [NONE_EXC_STRING])
+
class TracebackFormatTests(unittest.TestCase):
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 090465a..dfb296c 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -528,7 +528,9 @@ class TracebackException:
cause = None
if compact:
- need_context = cause is None and not e.__suppress_context__
+ need_context = (cause is None and
+ e is not None and
+ not e.__suppress_context__)
else:
need_context = True
if (e and e.__context__ is not None
diff --git a/Misc/NEWS.d/next/Library/2021-02-06-21-21-35.bpo-43146.MHtb2v.rst b/Misc/NEWS.d/next/Library/2021-02-06-21-21-35.bpo-43146.MHtb2v.rst
new file mode 100644
index 0000000..8d213a4
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-02-06-21-21-35.bpo-43146.MHtb2v.rst
@@ -0,0 +1 @@
+Fix recent regression in None argument handling in :mod:`~traceback` module functions. \ No newline at end of file