mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	gh-133017: Improve error message for invalid typecodes in multiprocessing.{Array,Value} (GH-133252)
This commit is contained in:
		
							parent
							
								
									2cd24ebfe9
								
							
						
					
					
						commit
						f52de8a937
					
				
					 3 changed files with 22 additions and 1 deletions
				
			
		| 
						 | 
					@ -37,7 +37,12 @@
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _new_value(type_):
 | 
					def _new_value(type_):
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
        size = ctypes.sizeof(type_)
 | 
					        size = ctypes.sizeof(type_)
 | 
				
			||||||
 | 
					    except TypeError as e:
 | 
				
			||||||
 | 
					        raise TypeError("bad typecode (must be a ctypes type or one of "
 | 
				
			||||||
 | 
					                        "c, b, B, u, h, H, i, I, l, L, q, Q, f or d)") from e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    wrapper = heap.BufferWrapper(size)
 | 
					    wrapper = heap.BufferWrapper(size)
 | 
				
			||||||
    return rebuild_ctype(type_, wrapper, None)
 | 
					    return rebuild_ctype(type_, wrapper, None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2463,6 +2463,12 @@ def test_getobj_getlock(self):
 | 
				
			||||||
        self.assertNotHasAttr(arr5, 'get_lock')
 | 
					        self.assertNotHasAttr(arr5, 'get_lock')
 | 
				
			||||||
        self.assertNotHasAttr(arr5, 'get_obj')
 | 
					        self.assertNotHasAttr(arr5, 'get_obj')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @unittest.skipIf(c_int is None, "requires _ctypes")
 | 
				
			||||||
 | 
					    def test_invalid_typecode(self):
 | 
				
			||||||
 | 
					        with self.assertRaisesRegex(TypeError, 'bad typecode'):
 | 
				
			||||||
 | 
					            self.Value('x', None)
 | 
				
			||||||
 | 
					        with self.assertRaisesRegex(TypeError, 'bad typecode'):
 | 
				
			||||||
 | 
					            self.RawValue('x', None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _TestArray(BaseTestCase):
 | 
					class _TestArray(BaseTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2543,6 +2549,12 @@ def test_getobj_getlock_obj(self):
 | 
				
			||||||
        self.assertNotHasAttr(arr5, 'get_lock')
 | 
					        self.assertNotHasAttr(arr5, 'get_lock')
 | 
				
			||||||
        self.assertNotHasAttr(arr5, 'get_obj')
 | 
					        self.assertNotHasAttr(arr5, 'get_obj')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @unittest.skipIf(c_int is None, "requires _ctypes")
 | 
				
			||||||
 | 
					    def test_invalid_typecode(self):
 | 
				
			||||||
 | 
					        with self.assertRaisesRegex(TypeError, 'bad typecode'):
 | 
				
			||||||
 | 
					            self.Array('x', [])
 | 
				
			||||||
 | 
					        with self.assertRaisesRegex(TypeError, 'bad typecode'):
 | 
				
			||||||
 | 
					            self.RawArray('x', [])
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					Improve the error message of :func:`multiprocessing.sharedctypes.Array`,
 | 
				
			||||||
 | 
					:func:`multiprocessing.sharedctypes.RawArray`, :func:`multiprocessing.sharedctypes.Value` and
 | 
				
			||||||
 | 
					:func:`multiprocessing.sharedctypes.RawValue` when an invalid typecode is passed. Patch
 | 
				
			||||||
 | 
					by Tomas Roun
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue