Web2py错误:<type'exception.indexerror'=“”>列表索引超出范围

时间:2017-09-24 00:25:23

标签: python web2py

我正在尝试使用web2py应用程序here,我收到错误消息。我在StackOverFlow和其他网络资源上尝试了多种解决方案,但无法使其发挥作用。我知道这是列表的问题,但对正确的方向的一点点将是很大的帮助。但是我尝试了一些解决方案,没有任何方法可以帮助我。

CODE:

def __edit_survey():
    surveys=db(db.survey.code_edit==request.args[0]).select()
    if not surveys:
        session.flash='survey not found'
        redirect(URL('index'))
    return surveys[0]

def __take_survey():
    surveys=db(db.survey.code_take==request.args[0]).select()
    if not surveys:
        session.flash='survey not found'
        redirect(URL('index'))
    return surveys[0]

错误:

Error ticket for "SurveyAppFlourish"
Ticket ID
127.0.0.1.2017-09-23.04-40-15.58fadb34-fbc0-4064-b9e1-ecc67362eafa
<type 'exceptions.IndexError'> list index out of range
Version
web2py™
Version 2.15.3-stable+timestamp.2017.08.07.12.51.45
Python
Python 2.7.12: C:\Python27\python.exe (prefix: C:\Python27)
Traceback
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Traceback (most recent call last):
  File "C:\Users\Mudassar\PycharmProjects\web2pydemoproject\web2py\gluon\restricted.py", line 219, in restricted
    exec(ccode, environment)
  File "C:/Users/Mudassar/PycharmProjects/web2pydemoproject/web2py/applications/SurveyAppFlourish/controllers/survey.py", line 299, in <module>
  File "C:\Users\Mudassar\PycharmProjects\web2pydemoproject\web2py\gluon\globals.py", line 409, in <lambda>
    self._caller = lambda f: f()
  File "C:/Users/Mudassar/PycharmProjects/web2pydemoproject/web2py/applications/SurveyAppFlourish/controllers/survey.py", line 88, in take
    survey=__take_survey()
  File "C:/Users/Mudassar/PycharmProjects/web2pydemoproject/web2py/applications/SurveyAppFlourish/controllers/survey.py", line 45, in __take_survey
    surveys=db(db.survey.code_take==request.args[0]).select()
IndexError: list index out of range

错误发生在surveys=db(db.survey.code_edit==request.args[0]).select()

1 个答案:

答案 0 :(得分:0)

在表单/app/controller/function/a/b/c的网址中,function之后的路径部分(即abc在这种情况下)被存储为request.args中的列表。如果request.args[0]正在抛出IndexError,则表示请求的网址中没有网址args。

request.args不是标准的Python列表,而是类gluon.storage.List的对象。它是可调用的并且需要一些额外的参数来处理特殊情况。例如,您可以在没有URL args时指定默认值:

db(db.survey.code_edit == request.args(0, default=my_default)).select()

如果您只想在项目不存在时想要值None,则不必明确指定默认值:

db(db.survey.code_edit == request.args(0)).select()

在上方,request.args(0)将返回None而非提出IndexError

作为替代方案,您可以在缺少项目时指定重定向网址:

db(db.survey.code_edit == request.args(0, otherwise=URL('index')).select()

如果没有request.args[0],则上述内容将重定向到index网址。 otherwise参数也可以是一个函数(例如,您可以使用它来设置response.flash,然后执行重定向。)