0

このエラーを処理するにはどうすればよいですか?

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 に設定することだと考えました。これを処理する別の方法はありますか?それらのいずれかが表示されない場合、ゼロに設定されて追加できるようになります。また、両方がゼロになると、追加できるように 0 に設定できます。

4

1 に答える 1

1

問題の一部は、おそらく if/elif ロジックにあります。elif は、最初の if ステートメントが false として登録された場合にのみ実行されることに注意してください。したがって、次のシナリオを想像してください。

check = 0
ind = None
team = None

そのシナリオでは、最初に、carttotal が 0 に設定されます。次に、最初の if が true (check が 0) だったので、残りの elif は実行されず、ind + team try が追加されても追加されます。 None から変更されていません。

これを行うにはもっと洗練された方法がありますが、elif を if に変更するだけで問題なく動作するはずです。ただし、そこには冗長性があり、3 番目の演算子を使用してロジックを数行に短縮します。

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
于 2014-07-06T05:32:46.123 に答える