Merge 3.5 (fix raise)

This commit is contained in:
Victor Stinner 2016-08-18 18:14:15 +02:00
commit 0a6996d87d
3 changed files with 24 additions and 1 deletions

View File

@ -1043,6 +1043,24 @@ class ThreadingExceptionTests(BaseTestCase):
self.assertEqual(out, b'') self.assertEqual(out, b'')
self.assertNotIn("Unhandled exception", err.decode()) self.assertNotIn("Unhandled exception", err.decode())
def test_bare_raise_in_brand_new_thread(self):
def bare_raise():
raise
class Issue27558(threading.Thread):
exc = None
def run(self):
try:
bare_raise()
except Exception as exc:
self.exc = exc
thread = Issue27558()
thread.start()
thread.join()
self.assertIsNotNone(thread.exc)
self.assertIsInstance(thread.exc, RuntimeError)
class TimerTests(BaseTestCase): class TimerTests(BaseTestCase):

View File

@ -10,12 +10,17 @@ What's New in Python 3.6.0 beta 1
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #27558: Fix a SystemError in the implementation of "raise" statement.
In a brand new thread, raise a RuntimeError since there is no active
exception to reraise. Patch written by Xiang Zhang.
Library Library
------- -------
- Issue #9998: On Linux, ctypes.util.find_library now looks in LD_LIBRARY_PATH - Issue #9998: On Linux, ctypes.util.find_library now looks in LD_LIBRARY_PATH
for shared libraries. for shared libraries.
What's New in Python 3.6.0 alpha 4 What's New in Python 3.6.0 alpha 4
================================== ==================================

View File

@ -4154,7 +4154,7 @@ do_raise(PyObject *exc, PyObject *cause)
type = tstate->exc_type; type = tstate->exc_type;
value = tstate->exc_value; value = tstate->exc_value;
tb = tstate->exc_traceback; tb = tstate->exc_traceback;
if (type == Py_None) { if (type == Py_None || type == NULL) {
PyErr_SetString(PyExc_RuntimeError, PyErr_SetString(PyExc_RuntimeError,
"No active exception to reraise"); "No active exception to reraise");
return 0; return 0;