2014-07-06 12 views
0
나는이 오류를 처리 할 수있는 방법

, 그 미친 날 운전 : 또한지원되지 않는 피연산자 유형 (들) +에 대한 'NoneType'및 'NoneType'

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으로 설정됩니다. 또한 모두가 0이 될 때 추가 할 수 있도록 0으로 설정할 수 있습니다.

+0

먼저 'print int'와 'print team'을 추가하여 어떤 값이 'None'인지 확인하십시오. 또한, 귀하의 _ 실제보기입니까? stacktrace + 정확한 코드가 도움이 될 것입니다. – karthikr

+0

예. 이후의 모든 것이 반환되는 내 실제보기입니다. 스택 추적이 무엇인지 잘 모르겠습니다. 또한 체인 중 하나는 체인이 두 개의 쿼리에서 값을 취하고 있기 때문에 None 일 수 있습니다. 항상 두 가지를 반환하지 않습니다. – user3806832

+0

stacktrace는 오류 화면에서 볼 수있는 것입니다 (문제의 줄 번호 등). – karthikr

답변

0

문제의 일부는 아마도 if/elif 논리입니다. 첫 번째 if 문이 false로 등록되면 elif는 실행된다는 점을 기억하십시오. 그래서,이 시나리오를 상상 :이 시나리오에서

check = 0 
ind = None 
team = None 

을, 그렇게하는 첫 번째 경우 첫 번째 (확인은 0), 나머지 elifs 돈을 '사실 때문에 그 carttotal이, 그리고 0으로 동일하게 설정됩니다이다 t run 및 ind + team try는 None에서 변경되지 않았더라도 추가됩니다.

더 우아한 방법이 있지만, 만약 당신이 elifs를 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 
+0

선생님, 저는 너 때문에 더 똑똑해. 나는 내가 그것을 끝내기보다는 끝내기를 바랐다면 좋겠다. (존재하지 않는다면 가짜 인스턴스를 만든다. 귀하의 방법은 아마도 더 효율적이므로 DB를 사용하므로 사용하겠습니다. 나는 elif가 false 일 때만 발생한다는 것을 몰랐습니다. – user3806832

+0

예, elif는 파이썬이 "else if"라고 짧게 표현한 방식입니다. 그래서 "else"부분이 참이어야합니다 (False이면 원래의 의미입니다). – MBrizzle