“如何修复mypy错误”;表达式的类型为Any[misc]“misc”;,对于python类型的int\uuu pow\uuuu int暗示?

“如何修复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

我有一个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: 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 >代码>运行时失败,则使用 FieldIsIsPys<代码>的结果进行特定操作。您可能需要在此处添加验证。例如,在没有验证的情况下:

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