【问题标题】:mypy: Missing positional argumentmypy:缺少位置参数
【发布时间】:2021-12-05 20:52:52
【问题描述】:

我将 mypy 用作 linter,但对默认参数的处理方式有些困惑。
我使用以下类型注释:

def func(dict_1: Dict[str, Any], dict_2: Optional[Dict[str, str]]) 

真正的功能是签名是:

def func(dict_1, dict_2=None)

mypy docs我看到如果我的参数默认值为None,那么我可以使用Optional(见本章末尾的第3条注释)
但我收到以下错误:

error: Missing positional argument "dict_2" in call to "func"  [call-arg]

linter 是否允许我调用类似 func(dict_val) 的函数并保留未填充的默认参数?

【问题讨论】:

  • 具有默认值的参数(从调用者的角度来看是可选的)与类型为 Optional 的参数不同。 dict_2: Optional[Dict[str, str]] = None 应该让mypy 的检查通过。
  • 如你所见,我正在使用它,我只是输入了存根文件。这不起作用
  • 您使用的是 dict_2: Optional[Dict[str, str]],但后面没有 `=None`(如果在存根文件中,则为 `=...`)。

标签: python mypy typing linter


【解决方案1】:

您在存根文件中包含类型提示,这意味着您应该编写以下内容以向mypy 表明dict_2 具有默认参数:

dict_2: Optional[Dict[str, str]] = ...

【讨论】:

    猜你喜欢
    • 2021-12-25
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多