+的'notType'和'NoneType'不受支持的操作数类型

时间:2014-07-06 03:36:25

标签: django django-models django-errors django-aggregation

我怎么能处理这个错误,它让我发疯:

unsupported operand type(s) for +: 'NoneType' and 'NoneType'

另外

unsupported operand type(s) for +: 'Float' and 'NoneType'

我得到它告诉我的东西(我想)所以这是我写的代码试图与它战斗

查看:

session = request.session._session_key
ind = signedup.objects.filter(sessionid = session)
team = team_signup.objects.filter(sessionid = session)
combine = list(chain(ind, team))


check = signedup.objects.filter(sessionid = session).count() + team_signup.objects.filter(sessionid = session).count()
ind = signedup.objects.filter(sessionid = session).aggregate(Sum ('price'))['price__sum']
team = team_signup.objects.filter(sessionid = session).aggregate(Sum ('price'))['price__sum']
if check == 0:
  carttotal = 0.00
elif ind == None:
  ind = 0.00
elif team == None:
  team = 0.00

carttotal = ind + team


return render_to_response("cart.html",locals(),context_instance = RequestContext(request))

我认为我正在做的是将它们的值设置为0然后添加它,如果它碰巧没有作为值。是否有另一种方法来处理这个问题,以便当其中一个确实没有出现时,它会被设置为零,因此可以添加它。此外,当BOTH达到零时,它们可以设置为0,以便可以添加它们。

1 个答案:

答案 0 :(得分:1)

部分问题可能是if / elif逻辑。请记住,只有当第一个if语句注册为false时,elif才会运行。所以,想象一下这种情况:

check = 0
ind = None
team = None

在那种情况下,第一次发生的事情就是将carttotal设置为等于0.然后,由于第一个if为真(检查为0),剩余的elifs不会运行,而ind +团队尝试即使他们没有从无变更中获得补充。

有更优雅的方法可以做到这一点,但如果你只是将elif更改为ifs,它应该可以正常工作。但是,那里有一些冗余,并通过使用第三个运算符将逻辑缩短了几行

ind_query = signedup.objects.filter(sessionid = session)
ind = ind_query.aggregate(Sum ('price'))['price__sum'] if ind_query else 0

team_query = team_signup.objects.filter(sessionid = session)
team = team_query.aggregate(Sum ('price'))['price__sum'] if team_query else 0

carttotal = ind + team