Sanic框架之捕获异常

原创
2017/08/31 17:33
阅读数 344

前言

学习如何在Sanic中用修饰器捕获异常

使用

以往,我们捕获异常通常都是这样

from sanic import Sanic
from sanic.response import text
from functools import wraps

app = Sanic(__name__)

def fuc(f):
    @wraps(f)
    def a(request,*args,**kwargs):
        try:
            name = request.json
            result =  f(request, *args, **kwargs)
        except Exception as e:
            print('aaa')
            print(e)

        return f(request, *args, **kwargs)
    return a

@app.route('/',strict_slashes=True)
@fuc
def index(request):
    name = request.json
    print(name['test'])
    return text('This is Test !')

if __name__ == '__main__':   
    app.run(debug=True)

这种就比较常见,不使用异步来获取,但是当你的程序需要用异步来捕获的时候,这个时候原有的代码就无法捕获

因为** asyncio中都是通过future的exception来传递异常** 所以,代码呼之欲出

from sanic import Sanic
from sanic.response import text
from functools import wraps

app = Sanic(__name__)

def fuc(f):
    @wraps(f)
    async def a(request,*args,**kwargs):
        try:
            name = request.json
            result =  await f(request, *args, **kwargs)
        except Exception as e:
            print('aaa')
            print(e)

        return f(request, *args, **kwargs)
    return a



@app.route('/',strict_slashes=True)
@fuc
async def index(request):
    name = request.json
    print(name['test'])
    return text('This is Test !')

if __name__ == '__main__':
    app.run(debug=True)

通过使用async 以及await 的方式就能够接受到异常了

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部