【发布时间】:2021-04-28 07:34:02
【问题描述】:
我对 python 3.8 和 mypy 协同工作的方式有疑问。考虑这段代码:
from collections.abc import Callable
def feeder(get_next_item: Callable[[], str]) -> str:
return get_next_item()
虽然 mypy 批准此代码,但使用 python 3.8 运行它会产生错误
Traceback (most recent call last):
File "mypytest.py", line 3, in <module>
def feeder(get_next_item: Callable[[], str]) -> str:
TypeError: 'ABCMeta' object is not subscriptable
所以,让我们试试别的方法: from collections.abc import Callable
def feeder(get_next_item: Callable) -> str:
return get_next_item()
此时python3.8会运行正常,但是mypy会说
mypytest.py:4: error: Returning Any from function declared to return "str"
除了在返回时使用#type:ignore 之外,还有什么方法可以摆脱这个陷阱? 提前致谢
【问题讨论】:
-
你看到这个post了吗?
-
老实说,我看到了它,但我认为它与我无关,因为它在谈论映射,而不是可调用的。如果这能很快解决我的问题,我会尽快回复您
-
是的,它解决了。因此,为了记录,我将发布一个代码作为答案
标签: python type-hinting mypy