问题描述
我对 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 之外,有什么办法可以摆脱这个陷阱吗? 提前致谢
解决方法
感谢 XtianP。只是为了记录,这段代码对我来说效果很好
from typing import Callable
def feeder(get_next_item: Callable[[],str]) -> str:
return get_next_item()
print( feeder(lambda : 'Hi man') )