【发布时间】:2022-01-13 03:01:32
【问题描述】:
我在 VSCode 中使用 Pylance(带有 PyRight 支持的类型提示),并具有以下功能:
def sample(session: sqlalchemy.orm.Session) -> sqlalchemy.orm.query.Query:
return session.query((MyModel)
查看 Pylance 的类型推断时,该函数实际上具有 Query[Unknown] 的返回类型。当我将类型提示更改为sqlalchemy.orm.query.Query[MyModel] 时,Pylance 可以正确推断出相关类型。这很棒!直到我真正运行代码并得到TypeError: 'type' object is not subscriptable。
我得到这个错误的原因是有道理的,但似乎必须有某种方法可以使这个工作正常进行,否则 Pylance 只是在嘲弄我。我发现的一种解决方法(确实有效)是这样的:
def sample(session: sqlalchemy.orm.Session) -> (
sqlalchemy.orm.query.Query[MyModel]
if typing.TYPE_CHECKING
else sqlalchemy.orm.query.Query
):
return session.query(MyModel)
但这显然很糟糕,我讨厌它。我也许可以制作一个辅助函数来提取它并且更具可读性,但我真的觉得这应该是可能的,没有一个糟糕的解决方法!
【问题讨论】:
-
SQLA 1.4 中类型提示支持的文档docs.sqlalchemy.org/en/14/orm/extensions/mypy.html
-
谢谢! @snakecharmerb
标签: python types sqlalchemy typing pylance