Python 为什么mypy在MonkeyType自动注释的模块上失败?
假设以下模块和脚本文件: mymodule.py 要由MonkeyType注释的模块 def adda,b: 返回a+b myscript.py 从mymodule导入添加 地址2,3 加上“x”,“y” 使用Ubuntu终端自动为模块添加注释Python 为什么mypy在MonkeyType自动注释的模块上失败?,python,python-3.x,static-analysis,mypy,Python,Python 3.x,Static Analysis,Mypy,假设以下模块和脚本文件: mymodule.py 要由MonkeyType注释的模块 def adda,b: 返回a+b myscript.py 从mymodule导入添加 地址2,3 加上“x”,“y” 使用Ubuntu终端自动为模块添加注释 $ monkeytype run myscript.py $ monkeytype apply mymodule mymodule.py现在通过添加的注释进行了更改 由monkeytype注释的模块 从键入导入联合 def adda:Union[int
$ monkeytype run myscript.py
$ monkeytype apply mymodule
mymodule.py现在通过添加的注释进行了更改
由monkeytype注释的模块
从键入导入联合
def adda:Union[int,str],b:Union[int,str]->Union[int,str]:
返回a+b
但是如果我运行静态类型检查器,执行将终止,并出现两个错误。
为什么会发生这种情况
$ 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)
顺便说一句,我使用的是arch Python 3.8。不能保证MonkeyType生成的类型注释一定是正确的:使用运行时信息推断类型是一种有多个基本限制的技术 引用自述: MonkeyType的注释是一个信息丰富的初稿,由开发人员检查和更正 在这种特殊情况下,类型是不正确的,因为类型签名意味着执行addfoo,3是可以的,即使这样会在运行时导致崩溃:您不能同时添加字符串和int。您需要的是TypeVar而不是Union。请看这里: