]",变量的类型为 (...)-6ren"> ]",变量的类型为 (...)-考虑以下独立示例: from typing import List, Union T_BENCODED_LIST = Union[List[bytes], List[List[bytes]]] ret-6ren">
gpt4 book ai didi

python - 赋值中的类型不兼容(表达式的类型为 "List[]",变量的类型为 (...)

转载 作者:行者123 更新时间:2023-12-04 14:17:33 27 4
gpt4 key购买 nike

考虑以下独立示例:

from typing import List, Union

T_BENCODED_LIST = Union[List[bytes], List[List[bytes]]]
ret: T_BENCODED_LIST = []

当我用 mypy 测试它时,出现以下错误:

example.py:4: error: Incompatible types in assignment (expression has type "List[<nothing>]", variable has type "Union[List[bytes], List[List[bytes]]]")

这里有什么问题,我如何正确注释这个例子?

最佳答案

这与以下 mypy 错误有关:

  • https://github.com/python/mypy/issues/2164
  • https://github.com/python/mypy/issues/6463

  • 该问题与 Union 的使用有关带有空列表。
    有两种方法可以解决这个问题:
  • 让 mypy 忽略空列表分配(不理想,但可能是最简单的方法)
  • 使用类型提示函数执行空列表赋值

  • 方法 1 - 让 mypy 忽略空列表分配
    from typing import List, Union

    # Define the variable with type hint
    T_BENCODED_LIST: Union[List[bytes], List[List[bytes]]]

    # Set the value to empty list and tell mypy to look the other way.
    T_BENCODED_LIST = [] # type: ignore
    这感觉像是一种合理的方法,因为它允许 mypy 继续假设类型已正确定义。
    方法 2 - 使用类型提示函数进行空列表分配
    使用类型提示函数可以避免 Union 的问题和空列表。这种方法意味着添加仅用于解决打字问题所需的代码,因此不是我的首选方法。
    from typing import List, Union

    # Define the variable with type hint
    T_BENCODED_LIST: Union[List[bytes], List[List[bytes]]]

    # Create a type-hinted function that can be used
    # for assignment.
    def get_empty_list_bytes() -> List[bytes]:
    return []

    # Set the value to empty list using the function.
    # Mypy will assume the type based on the functions type hint.
    T_BENCODED_LIST = get_empty_list_bytes()

    关于python - 赋值中的类型不兼容(表达式的类型为 "List[<nothing>]",变量的类型为 (...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58906541/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com