如何解决使用自定义装饰器时Pylance 类型检测错误?
我有一个使用自定义装饰器的 Python 代码片段,尽管代码成功运行,但在使用装饰的函数时,Pylance 一直显示警告。问题似乎与 Pylance 无法识别装饰的函数返回 Result[Any] 而不是 Select 有关。以下是代码:
def execute(func):
def inner_wrapper(*args, **kwargs) -> Result[Any]:
with Session.begin() as session:
result = session.execute(func(*args, **kwargs))
return result
return inner_wrapper
@execute
def query_data_source(
start_id: int = 1, max_results_amount: int = 10
) -> Select: # 忽略
stmt = (
select(
DataSource.id,
DataSource.name,
DataSource.source_url,
DataSource.author,
DataSource.description,
DataSource.cover_image_url,
DataSource.start_date,
DataSource.end_date,
)
.where(DataSource.id >= start_id)
.limit(max_results_amount)
.order_by(DataSource.id)
)
return stmt
尽管代码功能正常,但 Pylance 发出警告,假设 query_data_source 函数返回 Select 而不是 Result[Any]。如何修改此代码以消除 Pylance 警告并准确传达装饰函数的返回类型?
其中 Session 是 sqlalchemy.orm 的 session 对象。DataSouce 是一张数据库表。
回复
1个回答
test
2024-06-21
加上这个试试,测试是可以的
from typing import Callable
def execute(func) -> Callable[..., Result]:
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容