【发布时间】: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`(如果在存根文件中,则为 `=...`)。