小编Cha*_*e A的帖子

如何让 mypy 识别较新版本的 python?

我刚刚将项目更新到 Python 3.7,当我在项目上运行 mypy 时,我看到此错误:error: "Type[datetime]" has no attribute "fromisoformat"

datetime 在 Python 3.7 中确实有这个函数fromisoformat,但在以前的 Python 版本中没有。为什么 mypy 报告此错误,如何让它正确分析 Python 3.7?

到目前为止我尝试过的事情:

  • 删除 .mypy_cache (其中有一个看起来可疑的子文件夹,标题为3.6
  • 重新安装 mypypip install --upgrade --force-reinstall mypy

重现:

  • 创建一个python 3.6项目

  • 在项目 venv 中安装 mypy 0.761(最新)

  • mypy .使用 mypy ( )扫描项目

  • 将项目更新为python 3.7

  • 添加一个包含以下代码的文件:

    from datetime import datetime
    datetime.fromisoformat('2011-11-04 00:05:23.283')
    
    Run Code Online (Sandbox Code Playgroud)
  • 再次扫描项目 ( mypy .) [更新:这实际上工作得很好。它重新运行我的预提交挂钩,而没有在新的 Python 版本 venv 上重新安装预提交,从而导致了问题。]

python python-3.x mypy python-3.7

12
推荐指数
2
解决办法
5481
查看次数

如何为具有特定关键字参数的函数添加类型提示?

我想向其输入(也是函数)具有特定关键字参数的高阶函数添加类型提示。

我的代码看起来与此类似:

def foo(a: int, b: int) -> int:
    ...


def bar(c: Callable[[int, int], int]) -> int:
    return c(a=1, b=2)  # getting a mypy error: Unexpected keyword argument "a"
Run Code Online (Sandbox Code Playgroud)

在示例中,我希望能够c从 的函数作用域进行调用bar,并且我希望能够假设它具有关键字参数ab

我可以理解为什么 mypy 会在这里抱怨,因为具有不同签名的其他函数可以作为参数传入b,然后c(a=1, b=2)将不再起作用。但似乎应该有一种方法可以在类型提示中添加关键字参数名称,以明确保证函数接受带有名称和 的c参数。ab

python typing type-hinting mypy

6
推荐指数
1
解决办法
2886
查看次数

标签 统计

mypy ×2

python ×2

python-3.7 ×1

python-3.x ×1

type-hinting ×1

typing ×1