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

2024-05-17 11:35:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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,静态类型检查器,执行将终止,并出现两个错误。 为什么会发生这种情况

$ 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)

顺便说一句,我使用的是archpython3.8


Tags: 模块andpyaddbyreturndefint
1条回答
网友
1楼 · 发布于 2024-05-17 11:35:27

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

引用自述:

MonkeyType’s annotations are an informative first draft, to be checked and corrected by a developer.

在这种特殊情况下,类型是不正确的,因为类型签名意味着执行add("foo", 3)是可以的,即使这最终会导致运行时崩溃:您不能同时添加字符串和整数

相关问题 更多 >