2024-05-14 10:03:07 发布
网友
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)
经过一个小小的重写
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 )
values= ( jobrecord.get_cost() or 0 for jobrecord in query or 0 )
当查询为空时会发生什么?
您正在评估jobrecord.get_cost() or 0 for jobrecord in 0
jobrecord.get_cost() or 0 for jobrecord in 0
0确实不可接受。我想你应该放弃最后一个or 0。当筛选器查询不匹配任何元素时,它将返回一个空查询,并且您的总和将为0,因为sum([])为零。
or 0
sum([])
如果查询可能引发异常(无效日期或诸如此类的)是有原因的,那么or子句也不会捕捉到它。[][1] or 0仍然引发异常。
[][1] or 0
经过一个小小的重写
仔细看看
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
仍然引发异常。相关问题 更多 >
编程相关推荐