微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类型错误:“ABCMeta”对象在 Callable 上不可下标

如何解决类型错误:“ABCMeta”对象在 Callable 上不可下标

我对 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') )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。