使用Bottle捕获mako运行时错误

时间:2013-08-29 07:32:55

标签: python bottle mako

我正在寻找一种使用Bottle来捕捉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运行时错误,有没有人知道如何实现这个?

1 个答案:

答案 0 :(得分: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)

编辑:根据您的评论,以下是有关如何全局安装此内容的一些指示。在mako.exceptions.SyntaxException尝试块中安装包裹函数的bottle plugin

这些方面的东西:

@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)