Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么mypy在MonkeyType自动注释的模块上失败?_Python_Python 3.x_Static Analysis_Mypy - Fatal编程技术网

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

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

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

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,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。请看这里: