【问题标题】:Python Django loop logic: Error says 'int' is not iterable - check my syntax?Python Django 循环逻辑:错误说'int'不可迭代 - 检查我的语法?
【发布时间】:2010-10-14 05:32:30
【问题描述】:
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)

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    如果由于某种原因查询可能引发异常(无效日期等),or 子句也不会捕获该异常。 [][1] or 0 仍然会引发异常。

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多