【发布时间】:2021-12-12 14:30:27
【问题描述】:
如何按形状缩小Union?我不想用isinstance 或手动转换检查实际类型(有很多类型)。我也不能修改类型定义。
class X:
title = "1"
class Y:
name = "2"
class Z:
name = "3"
for (i, r) in enumerate([X(), Y(), Z()]): # type of r: X | Y | Z
if hasattr(r, "title"):
print(r.title) # error
else:
print(r.name) # error
类型检查错误说:
(variable) title: str | Unknown
Cannot access member "title" for type "Y"
Member "title" is unknown
Cannot access member "title" for type "Z"
Member "title" is unknown
(variable) name: Unknown | str
Cannot access member "name" for type "X"
Member "name" is unknown
【问题讨论】:
-
对我来说似乎是一个合法的 python 代码。你从哪里得到这个错误? Python 3.9.0 可以正确处理此代码。
-
@Sasha 使用 Pylance 进行类型检查时出错
-
可能是版本问题? VSCode 中的 Pylance v2021.12.1 没有给我任何错误。或者我应该在那里启用一些东西?
-
啊。我现在看到了。需要设置
"python.analysis.typeCheckingMode": "basic"
标签: python python-3.x python-typing pylance