2012-01-17 2 views
0

Я пытаюсь решить проблему исключения, с которой я столкнулся с django: у меня есть вид со следующим вызовом с адресом 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 (как указывает Роб Уутерс, отступ не кажется правильным). В любом случае, вы можете подтвердить, посмотрев номер строки, о которой сообщается ошибка.

0

Переведите второй вызов на render_to_response внутри блока try, он не имеет смысла там, где он есть сейчас, если структура блока if похожа на опубликованную вами. В противном случае вы всегда получите эту ошибку, так как это не ошибка времени выполнения.

Смежные вопросы