“如何修复mypy错误”;表达式的类型为Any[misc]“misc”;,对于python类型的int\uuu pow\uuuu int暗示?
我有一个python函数,它利用python uu pow uu(**)运算符和两个int,Mypy告诉我表达式“如何修复mypy错误”;表达式的类型为Any[misc]“misc”;,对于python类型的int\uuu pow\uuuu int暗示?,python,python-3.x,mypy,python-typing,Python,Python 3.x,Mypy,Python Typing,我有一个python函数,它利用python uu pow uu(**)运算符和两个int,Mypy告诉我表达式b**e的类型为“Any”,其中b和e的类型为“int”。我曾尝试使用int(b**e)将表达式转换为int,但仍然出现错误。如何正确键入此表达式 另外,如果表达式b**e确实返回类型“Any”,您能解释一下原因吗 错误: temp.py:7: error: Expression has type "Any" [misc] power: Calla
b**e
的类型为“Any”,其中b和e的类型为“int”。我曾尝试使用int(b**e)
将表达式转换为int,但仍然出现错误。如何正确键入此表达式
另外,如果表达式b**e
确实返回类型“Any”,您能解释一下原因吗
错误:
temp.py:7: error: Expression has type "Any" [misc]
power: Callable[[int, int], int] = lambda b, e: b ** e
^
temp.py:8: error: Expression has type "Any" [misc]
return reduce(mul, [pow(b, e) for b, e in fact.items()], 1)
^
临时工
从functools导入reduce
通过键入import Callable,Dict
def分解乘积(事实:Dict[int,int])->int:
''返回具有事实的素因式分解的乘积''
幂:可调用[[int,int],int]=lambda b,e:b**e#表达式“b**e”错误
乘积:可调用[[int,int],int]=lambda x,y:x*y
return reduce(product,[power(b,e)for b,e-fact.items()],1)
编辑:
我意识到我可以使用内置的pow和operator.mul来代替lambda,但我仍然得到了错误
错误:
temp.py:7: error: Expression has type "Any" [misc]
power: Callable[[int, int], int] = lambda b, e: b ** e
^
temp.py:8: error: Expression has type "Any" [misc]
return reduce(mul, [pow(b, e) for b, e in fact.items()], 1)
^
修正温度比
从functools导入reduce
从操作员导入mul
从键入导入Dict
def分解乘积(事实:Dict[int,int])->int:
''返回具有事实的素因式分解的乘积''
返回reduce(mul,[pow(b,e)for b,e-fact.items()],1)
另外,如果表达式b**e确实返回类型“Any”,您能解释一下原因吗
检查表明,仅在对数字进行平方运算的特殊情况下(x
,类型为Literal[2]
)才会返回int
)。这是因为即使b
和e
是int
s,e
可能是负数,在这种情况下,结果是一个浮点
。由于结果可以是一个float
或int
,因此对于一般情况,它看起来像typeshed
与Any
一起使用
我认为这是一种语言限制。理想情况下,我们可以对x
的所有非负整数使用@overload
,但Literal
仅支持特定值
要在使用--禁止任何expr
的同时解决此问题,请使用like so:
运行mypy--disallow any expr temp.py
现在返回Success:在1个源文件中未发现任何问题
<>但在您盲目添加<代码> Case<代码>之前,请考虑我在代码< E> <代码>为负的情况下,导致类型检查成功,但如果运行<代码> int >代码>运行时失败,则使用factorial_sized_lst = [0] * factorization_product({1: 2, 3: -4})
运行时失败,
无法将序列乘以“float”类型的非整数
,尽管mypy
报告类型检查成功。您使用的是python3吗?我没有发现python3中的代码有错误。您试图如何调用该方法?@KNOX python本身不会产生错误,但在使用mypy进行类型检查时,它会产生错误,错误为--disallow any expr arg:mypy--disallow any expr temp.py