0

我需要匹配输入可迭代的情况。这是我尝试过的:

from typing import Iterable

def detector(x: Iterable | int | float | None) -> bool:
    match x:
        case Iterable():
            print('Iterable')
            return True
        case _:
            print('Non iterable')
            return False

这产生了这个错误:

TypeError: called match pattern must be a type

是否可以通过匹配/大小写检测可迭代性?

请注意,这两个问题解决了相同的错误消息,但两个问题都不是关于如何检测可迭代性:

4

1 回答 1

0

问题是打字。Iterable仅用于类型提示,并且不被结构模式匹配视为“类型”。相反,您需要使用抽象基类来检测可迭代性:collections.abc.Iterable

解决方案是区分这两种情况,将一种标记为类型提示,另一种标记为结构模式匹配的类模式:

def detector(x: typing.Iterable | int | float | None) -> bool:
    match x:
        case collections.abc.Iterable():
            print('Iterable')
            return True
        case _:
            print('Non iterable')
            return False

另请注意,在撰写本文时mypy不支持match语句。

于 2022-03-01T19:41:11.067 回答