前言
学习如何在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)