use error label instead of breaking eval loop (closes #16693)
This commit is contained in:
parent
1a714750cf
commit
9272279afd
|
@ -462,6 +462,11 @@ class BuiltinTest(unittest.TestCase):
|
||||||
self.assertRaises(TypeError, eval, ())
|
self.assertRaises(TypeError, eval, ())
|
||||||
self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
|
self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
|
||||||
|
|
||||||
|
class X:
|
||||||
|
def __getitem__(self, key):
|
||||||
|
raise ValueError
|
||||||
|
self.assertRaises(ValueError, eval, "foo", {}, X())
|
||||||
|
|
||||||
def test_general_eval(self):
|
def test_general_eval(self):
|
||||||
# Tests that general mappings can be used for the locals argument
|
# Tests that general mappings can be used for the locals argument
|
||||||
|
|
||||||
|
|
|
@ -2162,9 +2162,8 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
||||||
else {
|
else {
|
||||||
v = PyObject_GetItem(locals, name);
|
v = PyObject_GetItem(locals, name);
|
||||||
if (v == NULL && PyErr_Occurred()) {
|
if (v == NULL && PyErr_Occurred()) {
|
||||||
if (!PyErr_ExceptionMatches(
|
if (!PyErr_ExceptionMatches(PyExc_KeyError))
|
||||||
PyExc_KeyError))
|
goto error;
|
||||||
break;
|
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue