【问题标题】:Django/Python Exceptions not working?Django/Python 异常不起作用?
【发布时间】:2012-01-17 16:04:32
【问题描述】:

我正在尝试解决我在使用 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,{}))   

【问题讨论】:

  • 您可以编辑您的帖子以修复缩进吗?

标签: python django exception-handling


【解决方案1】:

最后一个render_to_response 位于其上方的if 块之外。因此,如果GET 中没有items 键或items 键为空(/path/?items=),则apps 未定义。

最好用:

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

【讨论】:

  • 是的,就是这样。。我也修改了最后一点没有意义的代码!谢谢!
【解决方案2】:

问题可能出在第二个render_to_response 语句中。 apps 在没有赋值时被使用。

注意:我假设该语句不包含在上面的 if 语句中(正如 Rob Wouters 所指出的,缩进似乎不正确)。无论如何,您可以通过查看报告错误的行号来确认。

【讨论】:

    【解决方案3】:

    将第二次调用移动到try 块内的render_to_response,如果if 块结构与您发布的一样,它现在的位置没有意义。否则,您将始终收到该错误,因为它不是运行时错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 2016-01-24
      • 2021-04-08
      • 2017-04-05
      • 2019-05-07
      • 1970-01-01
      • 2020-01-19
      相关资源
      最近更新 更多