2017-09-24 4 views
0

私はweb2pyアプリケーションhereを試していますが、エラーメッセージが表示されています。私はStackOverFlowと他のWebリソースで複数のソリューションを試しましたが、動作させることはできませんでした。私はそれがリストに問題があることを知っていますが、右から少しの方向が大きな助けになるでしょう。しかし、私はいくつかのソリューションを試してみました。Web2pyエラー:<type 'exceptions.IndexError'>リストインデックスが範囲外です。

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:

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 

エラー(function後形/app/controller/function/a/b/cのURLでsurveys=db(db.survey.code_edit==request.args[0]).select()

+0

'request.args'は空のリストまたは空の文字列です。空の何かの0番目のインデックスを取得することはできません。最初にrequest.argsの存在をチェックすることをお勧めします。 – JacobIRR

答えて

0

、経路の一部でありますすなわち、a,b、この場合はc)がリストとしてrequest.argsに格納されます。 request.args[0]IndexErrorを投げている場合、リクエストされたURLにURL引数がないことを示します。

request.argsは標準のPythonリストではなく、クラスgluon.storage.Listのオブジェクトです。それは呼び出し可能であり、特殊なケースを処理するためにいくつかの追加の引数をとります。

:あなたは、単に項目が存在しない Noneの値が必要な場合は、明示的にデフォルト値を指定する必要はありません

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

:なしURLの引数がない場合たとえば、あなたはデフォルトを指定することができます

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

以上、request.args(0)は、IndexErrorを発行するのではなく、Noneを返します。項目が欠落しているとき

別の方法として、あなたはリダイレクトURLを指定することができます。

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

を一切request.args[0]が存在しない場合は、上記index URLにリダイレクトします。 otherwise引数はファンクションにすることもできます(たとえば、response.flashを設定してリダイレクトするなど)。

関連する問題