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