mirror of
https://github.com/python/cpython.git
synced 2025-09-29 19:56:59 +00:00
[3.6] bpo-28994: Fixed errors handling in atexit._run_exitfuncs(). (GH-2034) (#2121)
The traceback no longer displayed for SystemExit raised in a callback registered by atexit..
(cherry picked from commit 3fd54d4a7e
)
This commit is contained in:
parent
47c9decb5f
commit
d89dc844d2
3 changed files with 14 additions and 1 deletions
|
@ -23,6 +23,9 @@ def raise1():
|
|||
def raise2():
|
||||
raise SystemError
|
||||
|
||||
def exit():
|
||||
raise SystemExit
|
||||
|
||||
|
||||
class GeneralTest(unittest.TestCase):
|
||||
|
||||
|
@ -76,6 +79,13 @@ class GeneralTest(unittest.TestCase):
|
|||
self.assertRaises(ZeroDivisionError, atexit._run_exitfuncs)
|
||||
self.assertIn("ZeroDivisionError", self.stream.getvalue())
|
||||
|
||||
def test_exit(self):
|
||||
# be sure a SystemExit is handled properly
|
||||
atexit.register(exit)
|
||||
|
||||
self.assertRaises(SystemExit, atexit._run_exitfuncs)
|
||||
self.assertEqual(self.stream.getvalue(), '')
|
||||
|
||||
def test_print_tracebacks(self):
|
||||
# Issue #18776: the tracebacks should be printed when errors occur.
|
||||
def f():
|
||||
|
|
|
@ -49,6 +49,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- bpo-28994: The traceback no longer displayed for SystemExit raised in
|
||||
a callback registered by atexit.
|
||||
|
||||
- bpo-30508: Don't log exceptions if Task/Future "cancel()" method was
|
||||
called.
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ atexit_callfuncs(void)
|
|||
Py_XDECREF(exc_tb);
|
||||
}
|
||||
PyErr_Fetch(&exc_type, &exc_value, &exc_tb);
|
||||
if (!PyErr_ExceptionMatches(PyExc_SystemExit)) {
|
||||
if (!PyErr_GivenExceptionMatches(exc_type, 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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue