泛型函数的类型和异常,以返回一个对象或从QuerySet中引发带有单个项目的异常?

问题描述 投票:0回答:1

我的项目中有一个模式,在该模式中,我需要重复使用过滤逻辑来返回多个结果和单个结果(取决于输入和调用者的需求)。我想制作一些通用函数,将QuerySet作为其输入,并返回其中的唯一项,或者如果结果数不为1,则引发Model.objects.get()这样的异常。

def single_result_from_qset(qset: "QuerySet") -> Any:
    """TODO: make this work somehow"""
    if len(qset) > 1:
        raise qset.MultipleObjectsReturned
    try:
        return qset[0]
    except IndexError:  # this is not unreachable, no matter what PyCharm tells you
        raise qset.DoesNotExist

我尝试使用上述代码遇到的问题在我需要提出错误时出现。我没有提出错误,而是得到了AttributeError,因为MultipleObjectsReturnedDoesNotExist都不是QuerySet的属性。如何从QuerySet所作用的对象上引发这些错误?

作为一个额外的问题,函数定义的正确类型签名是什么?

我的项目中有一个模式,在该模式中,我需要重新使用过滤逻辑来返回多个结果和单个结果(取决于调用者的输入和需求)。我想做一些...

python types django-queryset typing
1个回答
0
投票

更好的解决方案是使用.get() from QuerySet而不是实现新的辅助函数。 .get()返回并完全抛出我要求上述帮助函数执行的操作。

© www.soinside.com 2019 - 2024. All rights reserved.