diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-01-05 03:54:25 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-01-05 03:54:25 (GMT) |
commit | 358e11d928ae4d3386c17eb0b48e7602029fec06 (patch) | |
tree | 408d941953c92b6c291c21ff7cd6a4eda8a2b4d2 | |
parent | 29e762c94172a4e0b2855f188399f8f05487920e (diff) | |
download | cpython-358e11d928ae4d3386c17eb0b48e7602029fec06.zip cpython-358e11d928ae4d3386c17eb0b48e7602029fec06.tar.gz cpython-358e11d928ae4d3386c17eb0b48e7602029fec06.tar.bz2 |
Issue #10756: atexit normalizes the exception before displaying it.
-rw-r--r-- | Lib/test/test_atexit.py | 8 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/atexitmodule.c | 1 |
3 files changed, 11 insertions, 0 deletions
diff --git a/Lib/test/test_atexit.py b/Lib/test/test_atexit.py index 8a71036..9c7e109 100644 --- a/Lib/test/test_atexit.py +++ b/Lib/test/test_atexit.py @@ -65,6 +65,14 @@ class TestCase(unittest.TestCase): self.assertRaises(TypeError, atexit._run_exitfuncs) + def test_raise_unnormalized(self): + # Issue #10756: Make sure that an unnormalized exception is + # handled properly + atexit.register(lambda: 1 / 0) + + self.assertRaises(ZeroDivisionError, atexit._run_exitfuncs) + self.assertIn("ZeroDivisionError", self.stream.getvalue()) + def test_stress(self): a = [0] def inc(): @@ -30,6 +30,8 @@ Core and Builtins Library ------- +- Issue #10756: atexit normalizes the exception before displaying it. + - Issue #10790: email.header.Header.append's charset logic now works correctly for charsets whose output codec is different from its input codec. diff --git a/Modules/atexitmodule.c b/Modules/atexitmodule.c index 1382133..1ee7ead 100644 --- a/Modules/atexitmodule.c +++ b/Modules/atexitmodule.c @@ -72,6 +72,7 @@ atexit_callfuncs(void) PyErr_Fetch(&exc_type, &exc_value, &exc_tb); if (!PyErr_ExceptionMatches(PyExc_SystemExit)) { PySys_WriteStderr("Error in atexit._run_exitfuncs:\n"); + PyErr_NormalizeException(&exc_type, &exc_value, &exc_tb); PyErr_Display(exc_type, exc_value, exc_tb); } } |