mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	Issue #19611: handle implicit parameters in inspect.signature
inspect.signature now reports the implicit ``.0`` parameters generated by the compiler for comprehension and generator expression scopes as if they were positional-only parameters called ``implicit0``. Patch by Jelle Zijlstra.
This commit is contained in:
		
							parent
							
								
									d62548afed
								
							
						
					
					
						commit
						b4b966ece2
					
				
					 5 changed files with 56 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -2396,6 +2396,20 @@ def __init__(self, name, kind, *, default=_empty, annotation=_empty):
 | 
			
		|||
        if not isinstance(name, str):
 | 
			
		||||
            raise TypeError("name must be a str, not a {!r}".format(name))
 | 
			
		||||
 | 
			
		||||
        if name[0] == '.' and name[1:].isdigit():
 | 
			
		||||
            # These are implicit arguments generated by comprehensions. In
 | 
			
		||||
            # order to provide a friendlier interface to users, we recast
 | 
			
		||||
            # their name as "implicitN" and treat them as positional-only.
 | 
			
		||||
            # See issue 19611.
 | 
			
		||||
            if kind != _POSITIONAL_OR_KEYWORD:
 | 
			
		||||
                raise ValueError(
 | 
			
		||||
                    'implicit arguments must be passed in as {}'.format(
 | 
			
		||||
                        _POSITIONAL_OR_KEYWORD
 | 
			
		||||
                    )
 | 
			
		||||
                )
 | 
			
		||||
            self._kind = _POSITIONAL_ONLY
 | 
			
		||||
            name = 'implicit{}'.format(name[1:])
 | 
			
		||||
 | 
			
		||||
        if not name.isidentifier():
 | 
			
		||||
            raise ValueError('{!r} is not a valid parameter name'.format(name))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue