Fix SystemError in "raise" statement
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.
This commit is contained in:
parent
54005afeee
commit
eec9331b20
|
@ -1043,6 +1043,24 @@ class ThreadingExceptionTests(BaseTestCase):
|
|||
self.assertEqual(out, b'')
|
||||
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):
|
||||
|
||||
|
|
|
@ -10,6 +10,10 @@ Release date: TBA
|
|||
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.
|
||||
|
||||
- Issue #27419: Standard __import__() no longer look up "__import__" in globals
|
||||
or builtins for importing submodules or "from import". Fixed handling an
|
||||
error of non-string package name.
|
||||
|
|
|
@ -4123,7 +4123,7 @@ do_raise(PyObject *exc, PyObject *cause)
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue