例外情况

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

引发异常

要抛出异常,只需从sanic.exceptions模块中引发相关异常。

from sanic.exceptions import ServerError

@app.route('/killme')
async def i_am_ready_to_die(request):
	raise ServerError("Something bad happened", status_code=500)

您还可以使用具有适当状态代码的abort函数:

from sanic.exceptions import abort
from sanic.response import text

@app.route('/youshallnotpass')
async def no_no(request):
        abort(401)
        # this won't happen
        text("OK")

异常处理

要覆盖sanic对异常的默认处理,则使用@app.exception修饰符。修饰符要求将异常列表作为参数处理。你可以通过心理治疗来抓住他们!修饰的异常处理程序函数必须将请求和异常对象作为参数。

from sanic.response import text
from sanic.exceptions import NotFound

@app.exception(NotFound)
async def ignore_404s(request, exception):
	return text("Yep, I totally found the page: {}".format(request.url))

还可以添加异常处理程序,例如:

from sanic import Sanic

async def server_error_handler(request, exception):
	return text("Oops, server error", status=500)

app = Sanic()
app.error_handler.add(Exception, server_error_handler)

在某些情况下,您可能希望向默认情况下提供的内容添加更多的错误处理功能。在这种情况下,您可以将sanic的默认错误处理程序子类化,如下所示:

from sanic import Sanic
from sanic.handlers import ErrorHandler

class CustomErrorHandler(ErrorHandler):
	def default(self, request, exception):
		''' handles errors that have no error handlers assigned '''
		# You custom error handling logic...
		return super().default(request, exception)
		
app = Sanic()
app.error_handler = CustomErrorHandler()

有用的例外

以下列出了一些最有用的例外情况:

  • NotFound:在找不到适合请求的路由时调用。

  • 服务器错误:当服务器内部出现问题时调用。如果用户代码中出现异常,通常会发生这种情况。

有关要引发的异常的完整列表,请参阅sanic.exceptions模块。