4

我正在寻找一种使用 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 Internal Server Error。

我想以类似的方式捕捉 mako 运行时错误,有没有人知道如何实现这一点?

4

1 回答 1

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 try 块中。

这些方面的东西:

@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)
于 2013-08-30T13:33:44.213 回答