You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyCharm提示参数未填充,即便Callable标注的所有参数均为可选

问题原因

你遇到的类型报错来自两个核心的类型注解匹配问题:

  • 你定义的func中第三个参数hide是仅限关键字参数(定义在签名的*符号之后),调用时只能通过关键字传参,不能按位置传递。但你写的Callable参数列表中的三个参数默认全部按位置参数处理,类型系统无法兼容仅限关键字参数的规则。
  • 标准Callable[[参数类型列表], 返回值类型]的语法本身不保留参数的默认值信息,即使原函数所有参数都配置了默认值,类型检查器也会认为你标注的input_function必须传入3个位置参数才能调用。
解决方案

方案1:使用Protocol定义函数协议(推荐,兼容Python 3.8+)

这种方式可以完整保留参数的类型、默认值、参数属性(位置/仅限关键字)信息,同时不丢失类型校验能力:

from typing import Protocol, Optional, Sequence, Awaitable

# 先定义匹配func签名的函数协议
class InputFunction(Protocol):
    async def __call__(self, 
        input_type: Optional[InputType] = None, 
        formats: Sequence[str] = (), 
        *, 
        hide: bool = False
    ) -> str: ...

# 替换你原来的类型注解
input_function: InputFunction = func

修改后你就可以按func的原生签名规则调用input_function,只传需要的参数即可,PyCharm不会再报参数缺失错误。

方案2:使用宽松的Callable注解(不推荐)

如果你不需要严格的参数类型校验,可以直接把注解修改为:

input_function: Callable[..., Awaitable[str]] = func

这种方式会跳过参数数量、类型的校验,虽然不会报错,但也失去了类型提示的保护。

注意事项

即使修改注解后,调用时如果要传hide参数,也必须使用关键字传参(比如input_function(input_type=xxx, hide=True)),不能按位置传递,否则依然会触发语法错误。

内容的提问来源于stack exchange,提问作者Jonathan1609

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:24:03