gpt4 book ai didi

python - 我如何让 Pylance 忽略 None 的可能性?

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

我喜欢 Pylance 类型检查。
但是,如果我有一个变量 var: Union[None, T] ,其中 T工具foo , pylance 将在以下位置抛出错误:var.foo()自类型 None不实现 foo .
有没有办法解决这个问题?一种告诉 Pylance 的方法“这个变量有时是 None,但在这种情况下,我 100% 确定它会被分配

最佳答案

有很多方法可以强制类型检查器接受这一点。

  • 使用 assert :
    from typing import Union

    def do_something(var: Union[T, None]):
    assert var is not None
    var.foo()

  • 提出其他一些异常(exception) :
    from typing import Union

    def do_something(var: Union[T, None]):
    if var is None:
    raise RuntimeError("NO")
    var.foo()

  • 使用 if声明 :
    from typing import Union

    def do_something(var: Union[T, None]):
    if var is not None:
    var.foo()

  • 使用 typing.cast , 一个在运行时什么都不做但强制类型检查器接受变量是某种类型的函数:
    from typing import Union, cast

    def do_something(var: Union[T, None]):
    var = cast(T, var)
    var.foo()

  • 关闭该行的类型检查器 :
    from typing import Union

    def do_something(var: Union[T, None]):
    var.foo() # type: ignore


  • 另请注意,虽然类型检查器如何解释您的类型注释没有区别(两者在语义上相同),但您也可以编写 typing.Union[T, None]typing.Optional[T] ,这可以说是更好的语法。 In Python >=3.10 (或更早,如果你的代码顶部有 from __future__ import annotations ),你甚至可以写 Union类型与 |运算符,即 T | None .

    关于python - 我如何让 Pylance 忽略 None 的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68446642/

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