【问题标题】:TypeError: 'ABCMeta' object is not subscriptable on CallableTypeError:“ABCMeta”对象在 Callable 上不可下标
【发布时间】: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 之外,还有什么方法可以摆脱这个陷阱? 提前致谢

【问题讨论】:

标签: python type-hinting mypy


【解决方案1】:

感谢 XtianP。仅作记录,这段代码对我来说效果很好

from typing import Callable

def feeder(get_next_item: Callable[[], str]) -> str:
    return get_next_item()

print( feeder(lambda : 'Hi man') )

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 2016-07-20
    • 1970-01-01
    • 2017-07-15
    • 2021-10-01
    • 2019-12-07
    • 2012-01-09
    • 2021-11-23
    • 2012-02-21
    相关资源
    最近更新 更多