{"record":{"id":"9ad8b05b9765c0b4","repo":"openai/openai-python","slug":"func-name-takes-len-positional-argument","errorCode":null,"errorMessage":"{func.__name__}() takes {len(positional)} argument(s) but {len(args)} were given","messagePattern":"(.+?)\\(\\) takes (.+?) argument\\(s\\) but (.+?) were given","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"src/openai/_utils/_utils.py","lineNumber":271,"sourceCode":"        params = inspect.signature(func).parameters\n        positional = [\n            name\n            for name, param in params.items()\n            if param.kind\n            in {\n                param.POSITIONAL_ONLY,\n                param.POSITIONAL_OR_KEYWORD,\n            }\n        ]\n\n        @functools.wraps(func)\n        def wrapper(*args: object, **kwargs: object) -> object:\n            given_params: set[str] = set()\n            for i, _ in enumerate(args):\n                try:\n                    given_params.add(positional[i])\n                except IndexError:\n                    raise TypeError(\n                        f\"{func.__name__}() takes {len(positional)} argument(s) but {len(args)} were given\"\n                    ) from None\n\n            for key in kwargs.keys():\n                given_params.add(key)\n\n            for variant in variants:\n                matches = all((param in given_params for param in variant))\n                if matches:\n                    break\n            else:  # no break\n                if len(variants) > 1:\n                    variations = human_join(\n                        [\"(\" + human_join([quote(arg) for arg in variant], final=\"and\") + \")\" for variant in variants]\n                    )\n                    msg = f\"Missing required arguments; Expected either {variations} arguments to be given\"\n                else:\n                    assert len(variants) > 0","sourceCodeStart":253,"sourceCodeEnd":289,"githubUrl":"https://github.com/openai/openai-python/blob/9917c6e28e66e90e1227b3d223c06a8c5441515a/src/openai/_utils/_utils.py#L253-L289","documentation":"The SDK uses a @required_args decorator on resource methods to reproduce Python's native 'takes N arguments but M were given' error for overloads with optional positional parameters. This TypeError fires when more positional arguments are passed than the method declares, i.e. the call site is treating the method as if it had extra positional slots (often a tuple splat or a copied call from another method's signature).","triggerScenarios":"Calling an SDK resource method with too many positional args, e.g. client.things.get(\"a\", \"b\", \"c\") for a method taking two; programmatically forwarding *args from a wrapper that appends extras; version upgrades that removed or merged positional parameters.","commonSituations":"Generic wrappers that forward *args to SDK methods whose signatures shrank between versions; copy-pasted calls between similar endpoints; splatting tuples of the wrong length.","solutions":["Pass parameters as keyword arguments: client.things.get(thing_id=\"...\") ","Check the method signature in the installed SDK version (help(client.things.get)) and fix the call arity","In wrappers, forward **kwargs only, not *args, so arity is checked by keywords","Pin the SDK version in lockfiles while fixing call sites after an upgrade"],"exampleFix":"# before\nclient.fine_tuning.jobs.retrieve(*params_tuple)  # tuple too long\n\n# after\nclient.fine_tuning.jobs.retrieve(job_id=params_tuple[0])","handlingStrategy":"validation","validationCode":"import inspect\nsig = inspect.signature(method)\npositional = [p for p in sig.parameters.values() if p.kind in (p.POSITIONAL_ONLY, p.POSITIONAL_OR_KEYWORD)]\nassert len(args) <= len(positional)","typeGuard":"def arity_ok(method, args: tuple) -> bool:\n    import inspect\n    try:\n        inspect.signature(method).bind(*args)\n        return True\n    except TypeError:\n        return False","tryCatchPattern":"try:\n    method(*args)\nexcept TypeError as e:\n    if \"were given\" in str(e): fix_arity_and_retry()","preventionTips":["Call SDK methods with keyword arguments","Don't splat tuples of unknown length","Re-check signatures after SDK upgrades"],"tags":["typeerror","arity","function-signature","api-usage"],"backgroundTag":"too-many-positional-arguments","analyzedSha":"9917c6e28e66e90e1227b3d223c06a8c5441515a","analyzedAt":"2026-08-28T11:46:34.183Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}