异常可以从请求处理程序中抛出,并由Sanic自动处理。异常将消息作为其第一个参数,也可以将状态代码返回到HTTP响应中。

Sanic提供了exceptions,里面已经内置了许多常见异常

Sanic源码可见,先是基于Exception封装了一个SanicException,然后再基于SanicException封装了许多常见的异常,同时还提供了abort函数,用于抛出自定义异常

Sanic十二:Sanic抛出异常、捕获异常、处理_自定义异常

Sanic十二:Sanic抛出异常、捕获异常、处理_封装_02

Sanic十二:Sanic抛出异常、捕获异常、处理_自定义异常_03

 

一、抛出异常

Sanic十二:Sanic抛出异常、捕获异常、处理_实例化_04

Sanic十二:Sanic抛出异常、捕获异常、处理_封装_05

Sanic十二:Sanic抛出异常、捕获异常、处理_常见异常_06

 

二、捕获异常并处理异常

方式1:使用装饰器,@app.exception(指定异常)来修饰处理函数,处理函数必须接受两个参数,第一个是request,第二个是exception

Sanic十二:Sanic抛出异常、捕获异常、处理_自定义异常_07

Sanic十二:Sanic抛出异常、捕获异常、处理_实例化_08

方式2:使用app.error_handler.add(异常类型, 异常处理函数)来添加异常处理,处理函数必须接受两个参数,第一个是request,第二个是exception

Sanic十二:Sanic抛出异常、捕获异常、处理_自定义异常_09

Sanic十二:Sanic抛出异常、捕获异常、处理_封装_10

 

捕获所有异常:当不知道会抛出什么异常,或者相统一处理异常,则直接捕获Exception即可

Sanic十二:Sanic抛出异常、捕获异常、处理_异常处理_11

Sanic十二:Sanic抛出异常、捕获异常、处理_异常处理_12

 

三、自定义异常类

Sanic提供了很多异常类,但是可能并不能满足实际业务需求,在某些情况下,您可能希望向默认情况下提供的内容添加更多的错误处理功能。在这种情况下,您可以将sanic的默认错误处理程序子类化

Sanic十二:Sanic抛出异常、捕获异常、处理_实例化_13

使用:

方法一:实例化Sanic时指定

Sanic十二:Sanic抛出异常、捕获异常、处理_实例化_14

方法二:实例化Sanic后指定

Sanic十二:Sanic抛出异常、捕获异常、处理_常见异常_15

 

讨论群:249728408