Cara melaksanakan pengendalian ralat dan pengecualian tersuai dalam FastAPI
Pengenalan:
FastAPI ialah rangka kerja web moden berdasarkan Python Prestasi tinggi dan keupayaan pembangunan pantas menjadikannya semakin popular dalam bidang pembangunan. Dalam aplikasi sebenar, ralat dan pengecualian sering ditemui. Artikel ini akan memperkenalkan cara melaksanakan pengendalian ralat dan pengecualian tersuai dalam FastAPI untuk membantu pembangun mengendalikan dan mengurus situasi ralat dalam aplikasi dengan lebih baik.
Pengendalian Ralat FastAPI:
FastAPI menyediakan mekanisme pengendalian pengecualian terbina dalam Dengan menggunakan pengendali atau penghias pengecualian, kami boleh menangkap dan mengendalikan ralat dalam aplikasi. Berikut ialah contoh pengendalian ralat asas:
from fastapi import FastAPI app = FastAPI() @app.exception_handler(Exception) async def validation_exception_handler(request, exc): return JSONResponse(status_code=400, content={"message": "Bad request"}) @app.get("/users/{user_id}") async def read_user(user_id: int): if user_id <= 0: raise Exception("Invalid user id") return {"user_id": user_id}
Dalam contoh di atas, kami menggunakan penghias @app.exception_handler
untuk mentakrifkan pengendali pengecualian global. Ia menerima dua parameter, parameter pertama ialah jenis pengecualian yang akan dikendalikan, dan parameter kedua ialah fungsi panggil balik yang digunakan untuk mengendalikan pengecualian. Dalam contoh ini, kami menangkap semua pengecualian Exception
dan mengembalikan JSONResponse
dengan mesej ralat tersuai. @app.exception_handler
装饰器来定义了一个全局的异常处理器。它接受两个参数,第一个参数是要处理的异常类型,第二个参数是一个回调函数,用于处理异常。在这个例子中,我们捕获了所有的Exception
异常,并返回一个带有自定义错误消息的JSONResponse
。
当我们访问/users/{user_id}
这个路由时,如果传入的user_id
小于等于0,将会抛出一个自定义的异常。通过上面定义的全局的异常处理器,我们可以捕获并处理这个异常,并返回一个带有错误消息的JSONResponse
。
自定义异常:
除了使用内置的异常类型,我们还可以自定义异常类型,以便更好地区分和处理不同类型的错误。下面是一个自定义异常的示例:
class InvalidUserIdException(Exception): def __init__(self, user_id: int): self.user_id = user_id super().__init__("Invalid user id") @app.get("/users/{user_id}") async def read_user(user_id: int): if user_id <= 0: raise InvalidUserIdException(user_id) return {"user_id": user_id}
在上面的示例中,我们定义了一个名为InvalidUserIdException
的自定义异常类,它继承自Exception
类。我们还在构造函数中接受了一个user_id
参数,用于在异常消息中显示具体的用户ID。在路由处理函数中,当user_id
小于等于0时,我们抛出了这个自定义异常。
再次运行应用程序时,我们会看到与之前相同的结果。这是因为我们没有定义针对该自定义异常的特定异常处理程序。为了捕获和处理自定义异常,我们可以添加一个新的异常处理器:
@app.exception_handler(InvalidUserIdException) async def invalid_user_id_exception_handler(request, exc): return JSONResponse(status_code=400, content={"message": str(exc)})
在上面的示例中,我们添加了一个新的异常处理器,用于捕获InvalidUserIdException
异常。它与之前的全局异常处理器有相同的结构,只是处理逻辑不同。在这个处理器中,我们将异常消息转换为字符串,并返回一个带有错误消息的JSONResponse
。
这样,当我们访问/users/{user_id}
这个路由时,如果传入的user_id
小于等于0,将会抛出InvalidUserIdException
异常。通过特定的异常处理器,我们可以捕获并处理这个异常,并返回一个带有自定义错误消息的JSONResponse
/users/{user_id}
, jika user_id
yang masuk adalah kurang daripada atau sama dengan 0, pengecualian tersuai akan dilemparkan. Melalui pengendali pengecualian global yang ditakrifkan di atas, kita boleh menangkap dan mengendalikan pengecualian ini dan mengembalikan JSONResponse
dengan mesej ralat.
Pengecualian tersuai:
rrreee
Dalam contoh di atas, kami telah mentakrifkan kelas pengecualian tersuai bernamaInvalidUserIdException
, yang mewarisi daripada kelas Exception
. Kami juga menerima parameter user_id
dalam pembina untuk memaparkan ID pengguna tertentu dalam mesej pengecualian. Dalam fungsi pemprosesan penghalaan, apabila user_id
kurang daripada atau sama dengan 0, kami membuang pengecualian tersuai ini. InvalidUserIdException
. Ia mempunyai struktur yang sama seperti pengendali pengecualian global sebelumnya, tetapi logik pemprosesan adalah berbeza. Dalam pengendali ini, kami menukar mesej pengecualian kepada rentetan dan mengembalikan JSONResponse
dengan mesej ralat. /users/{user_id}
, jika user_id
yang masuk adalah kurang daripada atau sama dengan 0, InvalidUserIdException kod akan dilemparkan kod>Pengecualian. Dengan pengendali pengecualian khusus, kami boleh menangkap dan mengendalikan pengecualian ini dan mengembalikan <code>JSONResponse
dengan mesej ralat tersuai. 🎜🎜Ringkasan: 🎜Dengan menggunakan mekanisme pengendalian ralat FastAPI, kami boleh mengendalikan dan mengurus situasi ralat dalam aplikasi kami dengan lebih baik. Kita boleh menggunakan pengendali pengecualian global untuk menangkap dan mengendalikan semua pengecualian, atau kita boleh menentukan pengendali pengecualian khusus untuk mengendalikan jenis pengecualian tertentu. Pada masa yang sama, kami juga boleh menyesuaikan kelas pengecualian untuk membezakan dan mengendalikan pelbagai jenis ralat dengan lebih baik, dengan itu meningkatkan kebolehbacaan dan kebolehselenggaraan kod. 🎜🎜Pautan rujukan: 🎜🎜🎜Dokumentasi rasmi FastAPI: https://fastapi.tiangolo.com/tutorial/handling-errors/🎜🎜Dokumentasi rasmi Python: https://docs.python.org/3/tutorial/errors. html🎜🎜Atas ialah kandungan terperinci Cara melaksanakan pengendalian ralat dan pengecualian tersuai dalam FastAPI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!