瓶中间件能够捕获某种类型的异常吗?

sta*_*r95 9 python plugins middleware wsgi bottle

鉴于这个简单的瓶代码:

def bar(i):
    if i%2 == 0:
        return i
    raise MyError

@route('/foo')
def foo():
    try:
        return bar()
    except MyError as e:
        response.status_code = e.pop('status_code')
        return e
Run Code Online (Sandbox Code Playgroud)

如何编写Bottle中间件,以便隐式完成相同的异常处理,这样这样的代码可以与上面的代码相同:

@route('/foo')
def foo():
    return bar()
Run Code Online (Sandbox Code Playgroud)

mic*_*ize 8

您可以使用插件优雅地执行此操作:

from bottle import abort

def error_translation(func):
    def wrapper(*args,**kwargs):
        try:
            func(*args,**kwargs)
        except ValueError as e:
            abort(400, e.message)
    return wrapper

app.install(error_translation)
Run Code Online (Sandbox Code Playgroud)