0
  • 更新 - こんにちは、Web 開発で「半分」の問題があります。

データベース呼び出しから値を取得するクラスにこのメソッドがあります(データベース内のテーブルにはキーがあります: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 を指定すると、データベースから 1 つの要素が取得されます。

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 - - [2013 年 4 月 5 日 13:29:22] "HTTP/1.1 GET /c/\css\style.css" - 500 内部サーバー エラー

しかし、Webは情報を正しく提供します 。Web出力に問題はありませんが、インデックスa [0]でこのエラーが発生する理由を知りたいです

iterbetter のいくつかの使用を簡素化するために a.list() を作成しました

アイドル インタープリターの完全なエラー メッセージ:

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
4

2 に答える 2

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

これは、実装の選択によって異なります。

于 2013-04-05T11:50:33.630 に答える
1

これは、空のリストからアイテムを取得しようとした場合に表示される正確なエラー メッセージです。

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

そのためa.list()、空のリストを返しているようです。

于 2013-04-05T11:45:59.687 に答える