2009-07-01 4 views
0

Предположим, что у меня есть метод контроллера следующим образом:Handling контроллер параметров отсутствует контроллер в TurboGears 2

@expose() 
def search(self, title): 
    return dict() 

Переход к http://site/search/ вызовет исключение быть выброшен: TypeError: поиск() занимает ровно 2 аргумента (1 приведены).

Ошибка логична, но я бы лучше обработал ее более изящно. Использует * args или ** kwargs единственный способ избежать ошибки, которую я даже не могу уловить?

EDIT: Я думаю, я всегда мог использовать название = None, но слишком много того, что могли бы получить некрасиво ...

Во всяком случае, есть способ, чтобы поймать исключение и/или обрабатывать аргумент несовпадений более изящно?

Благодаря

ответ

1

Исключение брошено на вас, задающие «несовместимыми» контроллер сигнатура метода происходит только в режиме отладки/разработки. Вам не нужно обрабатывать его более изящно в рабочей среде, потому что после отключения режима разработки методы контроллера отправляют HTTP 500 Error, когда им не хватает основных параметров.

Вы можете рассмотреть соответствующие настройки в вашем development.ini:

# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* 
# Debug mode will enable the interactive debugging tool, allowing ANYONE to 
# execute malicious code after an exception is raised. 
set debug = false 

Я надеюсь, что это был ваш вопрос.

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

Если вы хотите изменить отображение этих ошибок обратитесь к /controllers/error.py

Надеется, что это помогло,

Тома

+0

Моему вопрос был в основном связан с, как лучше обрабатывать ошибки как это. Думаю, вы ответили лучше всего, когда упоминали /controllers/error.py. Я посмотрю на это. Благодарю. – user37078