bpo-33967: Fix singledispatch raised IndexError when no args (GH-8184)
(cherry picked from commit 445f1b35ce
)
Co-authored-by: Dong-hee Na <donghee.na92@gmail.com>
This commit is contained in:
parent
c3bdea4c6c
commit
df9f633f94
|
@ -817,8 +817,13 @@ def singledispatch(func):
|
|||
return func
|
||||
|
||||
def wrapper(*args, **kw):
|
||||
if not args:
|
||||
raise TypeError(f'{funcname} requires at least '
|
||||
'1 positional argument')
|
||||
|
||||
return dispatch(args[0].__class__)(*args, **kw)
|
||||
|
||||
funcname = getattr(func, '__name__', 'singledispatch function')
|
||||
registry[object] = func
|
||||
wrapper.register = register
|
||||
wrapper.dispatch = dispatch
|
||||
|
|
|
@ -2187,6 +2187,13 @@ class TestSingleDispatch(unittest.TestCase):
|
|||
))
|
||||
self.assertTrue(str(exc.exception).endswith(msg_suffix))
|
||||
|
||||
def test_invalid_positional_argument(self):
|
||||
@functools.singledispatch
|
||||
def f(*args):
|
||||
pass
|
||||
msg = 'f requires at least 1 positional argument'
|
||||
with self.assertRaisesRegexp(TypeError, msg):
|
||||
f()
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
functools.singledispatch now raises TypeError instead of IndexError when no
|
||||
positional arguments are passed.
|
Loading…
Reference in New Issue