2015-05-26 2 views
0

Это мой код:Почему я получаю KeyError?

import web 
import json 

urls = (
    '/', 'index' 
    '/runs', 'runs' 
) 
app = web.application(urls, globals()) 
class index: 
    def GET(self): 
     render = web.template.render('templates/') 
     return render.index() 

class runs: 
    def GET(self): 
     return "Test" 

if __name__ == "__main__": app.run() 

И я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 239, in process 
return self.handle() 
File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 230, in handle 
return self._delegate(fn, self.fvars, args) 
File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 419, in _delegate 
cls = fvars[f] 
KeyError: u'index/runs' 

В основном, люди, кажется, забывают на самом деле создать класс (в моем случае работает) или не в импорте, если необходимо. Я не нашел другого решения, кроме проверки этих вещей.

ответ

5

Вы забыли запятую:

urls = (
    '/', 'index' 
#    ^
    '/runs', 'runs' 
) 

Без запятой, Python сцепляет две последовательные строки, так что вы действительно зарегистрированы:

urls = (
    '/', 'index/runs', 'runs' 
) 

и у вас нет такой функции в вашем globals() словаре.

Если я добавлю в запятую, ваш код будет работать.

+1

Боже мой, вы не имеете ни малейшего представления о том, как долго я смотрел на моем коде, я просто не понимал :(Спасибо за помощь – RandomDisplayName

1

Ваш код имеет опечатку:

urls = (
    '/', 'index', # missing comma 
    '/runs', 'runs' 
) 
+0

Это не делает. ответьте на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже их сообщения. –

+2

Это тот же ответ, что и у Martijn Pieters. Отсутствие запятой было ответом. –

Смежные вопросы