Geo*_*rge 2 python-3.x visual-studio-code vscode-settings python-typing pylance
我喜欢 Pylance 类型检查。
但是,如果我有一个变量var: Union[None, T]
,在那里T
实现foo
,pylance 将在以下位置抛出错误:
var.foo()
因为 typeNone
没有实现foo
.
有没有办法解决这个问题?一种告诉 Pylance 的方法“这个变量None
有时是,但在这种情况下,我 100% 确定它会被分配
请不要使用毯子# type: ignore
。相反,请具体说明您想要忽略的 linting 错误:
myOptionalVar.foo() # pyright: ignore[reportOptionalMemberAccess]
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于 VSCode 默认 linter Pylance,它使用 Pyright。
有很多方法可以强制类型检查器接受这一点。
(1) 用途assert
:
from typing import Union
def do_something(var: Union[T, None]):
assert var is not None
var.foo()
Run Code Online (Sandbox Code Playgroud)
(2) 引发其他一些异常:
from typing import Union
def do_something(var: Union[T, None]):
if var is None:
raise RuntimeError("NO")
var.foo()
Run Code Online (Sandbox Code Playgroud)
(3) 使用if
语句
from typing import Union
def do_something(var: Union[T, None]):
if var is not None:
var.foo()
Run Code Online (Sandbox Code Playgroud)
(4) Use typing.cast
,一个在运行时什么都不做但强制类型检查器接受变量是某种类型的函数:
from typing import Union, cast
def do_something(var: Union[T, None]):
var = cast(T, var)
var.foo()
Run Code Online (Sandbox Code Playgroud)
(5) 关闭该行的类型检查器
from typing import Union
def do_something(var: Union[T, None]):
var.foo() # type: ignore
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
103 次 |
最近记录: |