Джанго / Python Исключения не работают? - PullRequest
0 голосов
/ 17 января 2012

Я пытаюсь решить проблему исключений, которая у меня возникла с django: у меня есть представление со следующим вызовом с URL http://someurl.com/?items=1,2,3.Я хочу иметь дело со случаями, когда ?items= или ?items=somthing_bs.Когда я всегда получаю сообщение об ошибке: локальная переменная 'apps' ссылается до назначения.Разве он не должен перехватывать все исключения и ошибки, возникающие в предложении try?Мой код:

 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,{}))   

Ответы [ 3 ]

2 голосов
/ 17 января 2012

Последний render_to_response находится за пределами блока if над ним. Поэтому в тех случаях, когда в GET нет клавиши items или клавиша items пуста (/path/?items=), apps не определено.

Было бы лучше использовать:

if request.GET.has_key('items'):
0 голосов
/ 17 января 2012

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

0 голосов
/ 17 января 2012

Проблема, вероятно, во втором render_to_response утверждении. apps используется, когда ему не присвоено значение.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...