mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +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 @@ def g(frame, why, extra): | ||||||
|             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
	
	 R David Murray
						R David Murray