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

问题描述

我喜欢 Pylance 类型检查。

但是,如果我有一个变量 var: Union[None,T],其中 T 实现了 foo,pylance 将在以下位置抛出错误

var.foo() 因为类型 None 没有实现 foo

有什么办法可以解决这个问题吗?一种告诉 Pylance 的方法“这个变量有时是 None,但在这种情况下,我 100% 确定它会被分配

解决方法

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

(1) 使用 assert

from typing import Union

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

(2) 引发其他一些异常:

from typing import Union

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

(3) 使用 if 语句

from typing import Union

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

(4) 使用 typing.cast,这个函数在运行时什么都不做,但强制类型检查器接受一个变量是特定类型的:

from typing import Union,cast

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

(5) 关闭该行的类型检查器

from typing import Union

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...