2013-08-29 5 views
4

Я ищу способ поймать ошибки времени mako, используя Бутылку.Поймать ошибки времени mako, используя бутылку

Ошибки выполнения в Python являются пойманной, используя следующий код:

# main.py 
from lib import errors 
import bottle 

app = bottle.app() 
app.error_handler = errors.handler 
... 

# lib/errors.py 
from bottle import mako_template as template 

def custom500(error): 
    return template('error/500') 

handler = { 
    500: custom500 
} 

Это работает безупречно, так как исключения превращаются в 500 Внутренняя ошибка сервера.

Я хотел бы поймать ошибки времени выполнения mako аналогичным образом, есть ли у кого есть ключ к тому, как этого достичь?

ответ

3

Вы хотите поймать mako.exceptions.SyntaxException.

Этот код работает для меня:

@bottle.route('/hello') 
def hello(): 
    try: 
     return bottle.mako_template('hello') 

    except mako.exceptions.SyntaxException as exx: 
     return 'mako exception: {}\n'.format(exx) 

EDIT: На Ваш комментарий, вот некоторые указатели о том, как установить это в глобальном масштабе. Установите bottle plugin, который обертывает ваши функции в mako.exceptions.SyntaxException try block.

Что-то вдоль этих линий:

@bottle.route('/hello') 
def hello(): 
    return bottle.mako_template('hello') 

def catch_mako_errors(callback): 
    def wrapper(*args, **kwargs): 
     try: 
      return callback(*args, **kwargs) 
     except mako.exceptions.SyntaxException as exx: 
      return 'mako exception: {}\n'.format(exx) 
    return wrapper 

bottle.install(catch_mako_errors) 
+0

Ага, я не знаю, что вы могли бы сделать это. Но что, если есть много маршрутов? Должен ли я делать то же самое на всех маршрутах, или он может быть выполнен глобально каким-то образом? – Andreas

+0

Если вы хотите поймать их по всему миру, вы можете установить плагин для бутылок. Я обновляю свой ответ с некоторыми ссылками, которые укажут путь. –

+0

Выполнено - я добавил код, который работает по всему миру на мой первоначальный ответ. Это трюк? –

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

  • Нет связанных вопросов^_^