mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Merge #17413: make sure settrace funcs get passed exception instances for 'value'.
Patch by Ingrid Cheung and Brendan McLoughlin.
This commit is contained in:
commit
f097f175dd
4 changed files with 30 additions and 0 deletions
|
@ -458,6 +458,29 @@ class RaisingTraceFuncTestCase(unittest.TestCase):
|
||||||
self.fail("exception not propagated")
|
self.fail("exception not propagated")
|
||||||
|
|
||||||
|
|
||||||
|
def test_exception_arguments(self):
|
||||||
|
def f():
|
||||||
|
x = 0
|
||||||
|
# this should raise an error
|
||||||
|
x.no_such_attr
|
||||||
|
def g(frame, event, arg):
|
||||||
|
if (event == 'exception'):
|
||||||
|
type, exception, trace = arg
|
||||||
|
self.assertIsInstance(exception, Exception)
|
||||||
|
return g
|
||||||
|
|
||||||
|
existing = sys.gettrace()
|
||||||
|
try:
|
||||||
|
sys.settrace(g)
|
||||||
|
try:
|
||||||
|
f()
|
||||||
|
except AttributeError:
|
||||||
|
# this is expected
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
sys.settrace(existing)
|
||||||
|
|
||||||
|
|
||||||
# 'Jump' tests: assigning to frame.f_lineno within a trace function
|
# 'Jump' tests: assigning to frame.f_lineno within a trace function
|
||||||
# moves the execution position - it's how debuggers implement a Jump
|
# moves the execution position - it's how debuggers implement a Jump
|
||||||
# command (aka. "Set next statement").
|
# command (aka. "Set next statement").
|
||||||
|
|
|
@ -211,6 +211,7 @@ David Chaum
|
||||||
Nicolas Chauvat
|
Nicolas Chauvat
|
||||||
Jerry Chen
|
Jerry Chen
|
||||||
Michael Chermside
|
Michael Chermside
|
||||||
|
Ingrid Cheung
|
||||||
Albert Chin-A-Young
|
Albert Chin-A-Young
|
||||||
Adal Chiriliuc
|
Adal Chiriliuc
|
||||||
Matt Chisholm
|
Matt Chisholm
|
||||||
|
@ -802,6 +803,7 @@ Chris McDonough
|
||||||
Greg McFarlane
|
Greg McFarlane
|
||||||
Alan McIntyre
|
Alan McIntyre
|
||||||
Michael McLay
|
Michael McLay
|
||||||
|
Brendan McLoughlin
|
||||||
Mark Mc Mahon
|
Mark Mc Mahon
|
||||||
Gordon McMillan
|
Gordon McMillan
|
||||||
Andrew McNamara
|
Andrew McNamara
|
||||||
|
|
|
@ -10,6 +10,10 @@ What's New in Python 3.4.0 Alpha 1?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #17413: sys.settrace callbacks were being passed a string instead of an
|
||||||
|
exception instance for the 'value' element of the arg tuple if the exception
|
||||||
|
originated from C code; now an exception instance is always provided.
|
||||||
|
|
||||||
- Issue #17782: Fix undefined behaviour on platforms where
|
- Issue #17782: Fix undefined behaviour on platforms where
|
||||||
``struct timespec``'s "tv_nsec" member is not a C long.
|
``struct timespec``'s "tv_nsec" member is not a C long.
|
||||||
|
|
||||||
|
|
|
@ -3793,6 +3793,7 @@ call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f)
|
||||||
value = Py_None;
|
value = Py_None;
|
||||||
Py_INCREF(value);
|
Py_INCREF(value);
|
||||||
}
|
}
|
||||||
|
PyErr_NormalizeException(&type, &value, &traceback);
|
||||||
arg = PyTuple_Pack(3, type, value, traceback);
|
arg = PyTuple_Pack(3, type, value, traceback);
|
||||||
if (arg == NULL) {
|
if (arg == NULL) {
|
||||||
PyErr_Restore(type, value, traceback);
|
PyErr_Restore(type, value, traceback);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue