2012-01-17 3 views
0

나는 장고와 함께 가지고있는 예외 문제를 해결하려하고있다. URL이 다음과 같은 호출을 가지고있다. http://someurl.com/?items=1,2,3. ?items= 또는 ?items=somthing_bs 인 경우를 처리하고 싶습니다. 항상 오류가 발생합니다 : 할당 전에 로컬 변수 'apps'이 참조됩니다. try 절에서 오는 모든 예외와 오류를 잡아서는 안됩니까? 내 코드 :Django/Python 예외가 작동하지 않습니까?

def my_view(request): 
    if request.GET.get('mashpoint'): 
     try: 
      item_ids = request.GET.get('mashpoint') 
      item_ids = item_ids.split(',') 
      apps = mpApp.objects.filter(mpitem__pk__in=item_ids).distinct() 
      return render_to_response(template_name,context_instance=RequestContext(request,{'apps':apps,'item_ids':','.join(item_ids)})) 
     except: 
      return render_to_response(template_name,context_instance=RequestContext(request,{})) 
    return render_to_response(template_name,context_instance=RequestContext(request,{})) 
+0

는 들여 쓰기를 해결하기 위해 귀하의 게시물을 편집 할 수 있습니다 사용하는

그것은 더 나은 것입니까? –

답변

2

마지막 render_to_response은 그 위의 if 블록 밖에 있습니다. 따라서 items 키가 GET이거나 items 키가 비어있는 경우 (/path/?items=) apps은 정의되지 않습니다.

if request.GET.has_key('items'): 
+0

예, 그게 .. 마지막 비트에는 아무런 의미가없는 코드도 수정했습니다! 감사! –

0

문제는 아마도 두 번째 render_to_response 문에 있습니다. 값이 지정되지 않은 경우 apps이 사용됩니다.

참고 : 위의 문구는 위의 if 문에 포함되어 있지 않습니다. Rob Wouters가 지적한 것처럼 들여 쓰기가 올바르지 않습니다. 어쨌든 오류가보고되는 줄 번호를보고 확인할 수 있습니다.

0

두 번째 호출을 try 블록 내에있는 render_to_response 블록으로 옮기면 if 블록 구조가 게시 된 것과 같은 경우 현재 위치가 없습니다. 그렇지 않으면 런타임 오류가 아니기 때문에 항상 오류가 발생합니다.

관련 문제