首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可调用对象的联合和可调用对象列表转换为可调用对象列表时出现Python mypy类型错误

可调用对象的联合和可调用对象列表转换为可调用对象列表时出现Python mypy类型错误
EN

Stack Overflow用户
提问于 2021-02-06 00:39:19
回答 1查看 344关注 0票数 0

参数hook可以是函数,也可以是函数列表。如果它是一个函数,我将它转换成一个列表,这样我以后就可以假设它是一个列表。

代码语言:javascript
运行
复制
HookType = Union[Callable[[str], str], List[Callable[[str], str]]]

...

def __init__(
    ...
    hook: HookType = [],
):
    ...
    if type(hook) is not list:
        hook = [hook]
    self.hook: List[Callable[[str], str]] = hook

当我运行mypy时,我得到以下错误:

代码语言:javascript
运行
复制
foo.py:54: error: List item 0 has incompatible type "Union[Callable[[str], str], List[Callable[[str], str]]]"; expected "Callable[[str], str]"
foo.py:57: error: Incompatible types in assignment (expression has type "Union[Callable[[str], str], List[Callable[[str], str]]]", variable has type "List[Callable[[str], str]]")
Found 4 errors in 1 file (checked 20 source files)

mypy是否检测到检查hook类型的条件

我还应该提到我启用了一些mypy选项:

代码语言:javascript
运行
复制
[mypy]
check_untyped_defs = true
disallow_incomplete_defs = true
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-06 00:51:28

这可以通过使用isinstance来“修复”(至少在Pycharm的静态检查器实现中):

代码语言:javascript
运行
复制
if not isinstance(hook, list):
    hook = [hook]

MyPy比Pycharm更严格,但我希望它也能为MyPy修复它。if type(x) is y似乎抛出了类型检查器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66067128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档