绕过提高IndexError

时间:2011-03-02 11:34:31

标签: python django list exception

我的代码如下:

for p in qs:
    set = None
    try:
        set = p.property.property_locations.all()
    except IndexError:
        pass

    if set:

问题是当set为none时,它仍会从django.db.models.query的这一部分抛出IndexError:

try:
    qs = self._clone()
    qs.query.set_limits(k, k + 1)
    return list(qs)[0] 
except self.model.DoesNotExist, e:
    raise IndexError(e.args)

如何阻止系统抛出此错误并继续执行for循环中的下一个元素?

1 个答案:

答案 0 :(得分:14)

在任何情况下,您的代码都有两个错误:

  1. set是一个内置的(正如你从SO的语法高亮中看到的那样),所以通过给你的变量这个名称你没有任何目的隐藏内置,这至少是不好的做法,并可能在以后的问题中导致问题代码。
  2. 检查set是否为None的规范方法是写:如果set不是None
  3. 更好的是,编写该代码片段的规范方法是:

    try:
        [code that might raise an exception]
    except Error:
        [code that handles the exception]
    else:
        [code that executes when no exception was raised]
    

    (当然,替换实际例外的错误)

    这样你甚至不必在那时检查'设置'。