pythonDjango循环逻辑:错误提示“int”不可编辑检查我的语法?

2024-05-14 10:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

return sum(jobrecord.get_cost() or 0 
    for jobrecord in self.project.jobrecord_set.filter(
        date__lte=date,
        date__gte=self.start_date) or 0)

Tags: orinselfprojectforgetdatereturn
2条回答

经过一个小小的重写

query = self.project.jobrecord_set.filter(
        date__lte=date,
        date__gte=self.start_date)
values= ( jobrecord.get_cost() or 0 for jobrecord in query or 0 )
return sum( values )

仔细看看values= ( jobrecord.get_cost() or 0 for jobrecord in query or 0 )

当查询为空时会发生什么?

您正在评估jobrecord.get_cost() or 0 for jobrecord in 0

0确实不可接受。我想你应该放弃最后一个or 0。当筛选器查询不匹配任何元素时,它将返回一个空查询,并且您的总和将为0,因为sum([])为零。

如果查询可能引发异常(无效日期或诸如此类的)是有原因的,那么or子句也不会捕捉到它。[][1] or 0仍然引发异常。

相关问题 更多 >

    热门问题