假设以下模块和脚本文件:
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
MonkeyType将生成的类型注释不一定正确:使用运行时信息推断类型是一种具有多个基本限制的技术
引用自述:
在这种特殊情况下,类型是不正确的,因为类型签名意味着执行
add("foo", 3)
是可以的,即使这最终会导致运行时崩溃:您不能同时添加字符串和整数相关问题 更多 >
编程相关推荐