其他分享
首页 > 其他分享> > 使用Bottle捕获mako运行时错误

使用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运行时错误,有没有人知道如何实现这一点?

解决方法:

您想要捕获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)

标签:python,bottle,mako
来源: https://codeday.me/bug/20190629/1325640.html