'None' 对象的 mypy pop 错误不可迭代

mypy pop error for 'None' object is not iterable

这里我有这样一个函数:

def func_A(delta: Optional[List[int]],
           margin: Optional[List[int]]
           mode: str = 'OUT') -> Tuple[int, 
                                       Optional[List[int]],
                                       Optional[List[int]]]:

    result = 1

    if mode == "OUT":
        return result, [1,2,3], [4,5,6]

    elif mode == "IN":
        delta_x, delta_y = delta
        margin_x, margin_y = margin
        return result, None, None

    else:
        raise ValueError('wrong key')

然而,当我使用如下函数时,mypy 会弹出错误:

result, delta_options, margin_options = func_A(delta=None,
                                               margin=None,
                                               mode="OUT")

给出错误: 'None' 对象不可迭代

我的代码哪一部分有问题?提前致谢。

P.S。我的 mypy 配置如下:

mypy --ignore-missing-imports --follow-imports=skip --strict-optional .

问题是L.10

delta_x, delta_y = delta

增量类型为Optional[List[int]]。所以delta可以是None。如果 delta 为 None,则代码不起作用。

delta_x, delta_y = None

所以你需要在代码之前处理增量 None 大小写。

例如

if delta is not None:
    delta_x, delta_y = delta

delta_x, delta_y = delta if delta is not None else None, None

等等