【问题标题】:Django int comparison not workingDjango int比较不起作用
【发布时间】:2013-09-20 09:57:06
【问题描述】:

这是一个非常奇怪的问题,但我不明白为什么会这样:

我已经写了这段代码:

stusr = int(su.total)
if not stusr == 0:

但是,即使我确实知道 stusr.total 永远不会为 0(它总是被初始化),它永远不会执行 if 命令。即使我尝试除以 su.total 来计算百分比,我也会收到错误消息说我不能除以 0。

当我在屏幕上显示stusr 时,我得到非零值,所以我确定我正确初始化它。

这是我的模型

class StatsUser(models.Model):
  correct = models.IntegerField(default=0)
  incorrect = models.IntegerField(default=0)
  total = models.IntegerField(default=0)
  ...

希望你能帮助我理解这一点。

【问题讨论】:

  • 你能告诉我们su是什么吗?
  • su = StatsUser.objects.get(user=u)
  • 你在做objects.get,它只会得到一个对象,如果没有或更多的对象会抛出异常。即使您使用objects.filter(),QuerySet 对象也没有任何属性total。所以,我确定这不是su 的值。

标签: python django if-statement int


【解决方案1】:

虽然这是一个奇怪的习语,但它应该可以工作。尝试以下方法(使用正确的语法):

stusr = int(su.total)
if stusr:             # (all non-zero integer values are true)
    print("Yay, stusr is nonzero!")
else:
    print("Wha? But su.total is {}!".format(repr(su.total)))

【讨论】:

  • 我得到“什么?但 su.total 是 167”
  • ['什么?但 su.total 为 0!']
  • '是的,stusr 是非零的!'
  • 好的,我知道为什么会这样:我正在尝试使用 int 而不是 float 来计算百分比 ¬¬
【解决方案2】:

您不能在转换为 int 之前执行 print su.total 吗?在铸造之前看看它的价值是多少。 此外,total 字段是 IntegerField,这些字段不必强制转换为 int。

【讨论】:

    猜你喜欢
    • 2018-05-18
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多