Skip to content

Signature.bind allows certain positional-only parameters as keywords #130164

Closed
@dfremont

Description

Bug report

Bug description:

Prior to 3.13, the following code correctly raised a TypeError (I've tested 3.8-3.12, but see the last paragraph below):

def fun(x, /, **kwargs):
    pass

import inspect
sig = inspect.signature(fun)
sig.bind(x=1)

In 3.13, the binding succeeds even though the positional-only parameter was passed as a keyword argument (of course, fun(x=1) fails with a TypeError).

As far as I can tell this bug hasn't been previously reported, although issue #107831 reports inspect.getcallargs as having the same problem (prior to 3.13, unlike this bug).

I'm guessing the bug was introduced by #103404. If I try a version of 3.12 containing that patch (rather than the older versions I had installed previously), e.g. 3.12.9, it also exhibits the bug. It's possible that fixing the case where the positional-only parameter has a default value accidentally broke this case. Mentioning @jacobtylerwalls as the author of that PR in case they would like to take a look. Thanks!

CPython versions tested on:

3.13

Operating systems tested on:

macOS

Linked PRs

Metadata

Assignees

No one assigned

    Labels

    3.13bugs and security fixes3.14new features, bugs and security fixesstdlibPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions