如何解决使用自定义装饰器时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.1k
1 个回答
✓ 已被采纳

加上这个试试,测试是可以的

from typing import Callable

def execute(func) -> Callable[..., Result]:
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题