列表索引错误

时间:2013-04-05 11:42:30

标签: python list indexing web.py error-list

  • 更新 - 嗨,我的网页开发存在“一半”问题:

我在一个从数据库调用中取值的类中有这个方法,(数据库中的表有一个键:catId和另一个字段)

def getCat(self):
        ''' devuelve el numero de la categoria
        '''
        a = self.datab.select('categorias',where='catName = $nombre', vars=dict(nombre=self.nombre))
        a= a.list()
        return a[0].catId

    context: i use this to make some categorization in my web content, so i want to return the value wich will join to the content table in the database.

因此,如果我给它一个self.nombre,它是一个存储在数据库行中的字符串,我将从数据库中获取一个元素。

python解释器给了我这个错误:

  File "C:\xampp\htdocs\webpy\functions.py", line 26, in getCat
    return a[0].catId
IndexError: list index out of range
     
    

127.0.0.1:51463 - - [05 / Apr / 2013 13:29:22]“HTTP / 1.1 GET /c/\css\style.css” - 500内部服务器错误

  

但是网络正确地提供了信息 我对网络输出没有问题,但我想知道为什么这个错误在索引a [0]

我制作了a.list()以简化itterbetter的一些用途

在空闲解释器中完成错误消息:

0.0 (1): SELECT catName FROM categorias ORDER BY catId ASC 
127.0.0.1:51900 - - [05/Apr/2013 16:46:31] "HTTP/1.1 GET /c/" - 200 OK
0.0 (1): SELECT * FROM categorias WHERE catName = '\\css\\style.css'
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\web\application.py", line 236, in process
    return self.handle()
  File "C:\Python27\lib\site-packages\web\application.py", line 227, in handle
    return self._delegate(fn, self.fvars, args)
  File "C:\Python27\lib\site-packages\web\application.py", line 409, in _delegate
    return handle_class(cls)
  File "C:\Python27\lib\site-packages\web\application.py", line 384, in handle_class
    return tocall(*args)
  File "C:\xampp\htdocs\webpy\code.py", line 32, in GET
    seleccion = functions.categoria(db,cat)
  File "C:\xampp\htdocs\webpy\functions.py", line 16, in __init__
    self.n = self.getCat() #calculo del numero de la categoria PROBLEMAS
  File "C:\xampp\htdocs\webpy\functions.py", line 26, in getCat
    return a[0].catId
IndexError: list index out of range

2 个答案:

答案 0 :(得分:3)

您需要进行适当的错误处理,您可以这样做:

try:
    a[0].catId
except IndexError as ie:
    # Do some stuff here
except:
    # either re-raise the exception or pass it silently

或者你可以这样做:

return a and a[0].catId or [] # This will check for empty list

这取决于您的实施选择。

答案 1 :(得分:1)

如果您尝试从空列表中获取项目,那么这就是您将获得的确切错误消息:

>>> [][0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

所以看来a.list()正在返回一个空列表。