diff -r 6c2e2de5ab8e Lib/test/test_threading.py --- a/Lib/test/test_threading.py Sat Jul 30 23:51:13 2016 -0700 +++ b/Lib/test/test_threading.py Tue Aug 02 12:45:33 2016 +0800 @@ -1043,6 +1043,20 @@ self.assertEqual(out, b'') self.assertNotIn("Unhandled exception", err.decode()) + def test_bare_raise_in_brand_new_thread(self): + # issue 27558 + script = r"""if True: + import threading + def foo(): + raise + threading.Thread(target=foo).start() + """ + rc, out, err = assert_python_ok("-c", script) + err = err.decode() + self.assertIn('reraise', err) + self.assertIn('RuntimeError', err) + self.assertNotIn('SystemError', err) + class TimerTests(BaseTestCase): diff -r 6c2e2de5ab8e Python/ceval.c --- a/Python/ceval.c Sat Jul 30 23:51:13 2016 -0700 +++ b/Python/ceval.c Tue Aug 02 12:45:33 2016 +0800 @@ -4141,7 +4141,7 @@ type = tstate->exc_type; value = tstate->exc_value; tb = tstate->exc_traceback; - if (type == Py_None) { + if (type == Py_None || type == NULL) { PyErr_SetString(PyExc_RuntimeError, "No active exception to reraise"); return 0;