为什么Mypy在MonkeyType的自动注释模块上失败?

问题描述 投票:0回答:1

假定以下模块和脚本文件:

mymodule.py

# Module to be annotated by MonkeyType
def add(a, b):
    return a + b

myscript.py

from mymodule import add

add(2, 3)
add('x', 'y')

使用Ubuntu终端使用MonkeyType模块自动注释模块。

$ monkeytype run myscript.py
$ monkeytype apply mymodule

[mymodule.py现在通过添加的注释进行了更改。

# Module annotated by monkeytype
from typing import Union

def add(a: Union[int, str], b: Union[int, str]) -> Union[int, str]:
    return a + b

但是如果我运行静态类型检查器mypy,则执行将因2个错误而终止。为什么会发生这种情况?

$ mypy mymodule.py
mymodule.py:4: error: Unsupported operand types for + ("int" and "str")
mymodule.py:4: error: Unsupported operand types for + ("str" and "int")
mymodule.py:4: note: Both left and right operands are unions
Found 2 errors in 1 file (checked 1 source file)

btw我使用arch Python 3.8。

python python-3.x static-analysis mypy
1个回答
0
投票

不能保证MonkeyType将产生的类型注释必定是正确的:使用运行时信息推断类型是一种具有多个基本限制的技术。

引用自述文件:

MonkeyType的注释是内容丰富的初稿,将由开发人员进行检查和更正。

在这种特殊情况下,类型不正确,因为类型签名暗示执行add("foo", 3)很好,尽管这最终会在运行时导致崩溃:您不能将字符串和整数加在一起。

© www.soinside.com 2019 - 2024. All rights reserved.