bpo-43146: fix None-handling in single-arg traceback.print_exception(None) (GH-24629)
(The previous commit fixed print_exception(None, None, None).)
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index 2261ea9..5bd969d 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -235,6 +235,10 @@ def test_format_exception_only_exc(self):
def test_exception_is_None(self):
NONE_EXC_STRING = 'NoneType: None\n'
excfile = StringIO()
+ traceback.print_exception(None, file=excfile)
+ self.assertEqual(excfile.getvalue(), NONE_EXC_STRING)
+
+ excfile = StringIO()
traceback.print_exception(None, None, None, file=excfile)
self.assertEqual(excfile.getvalue(), NONE_EXC_STRING)
@@ -243,6 +247,7 @@ def test_exception_is_None(self):
self.assertEqual(excfile.getvalue(), NONE_EXC_STRING)
self.assertEqual(traceback.format_exc(None), NONE_EXC_STRING)
+ self.assertEqual(traceback.format_exception(None), [NONE_EXC_STRING])
self.assertEqual(
traceback.format_exception(None, None, None), [NONE_EXC_STRING])
self.assertEqual(
diff --git a/Lib/traceback.py b/Lib/traceback.py
index dfb296c..8f908dd 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -91,7 +91,10 @@ def _parse_value_tb(exc, value, tb):
if (value is _sentinel) != (tb is _sentinel):
raise ValueError("Both or neither of value and tb must be given")
if value is tb is _sentinel:
- return exc, exc.__traceback__
+ if exc is not None:
+ return exc, exc.__traceback__
+ else:
+ return None, None
return value, tb