Cara melaksanakan pengendalian ralat dan pengecualian tersuai dalam FastAPI

WBOY
Lepaskan: 2023-07-29 19:00:33
asal
2463 orang telah melayarinya

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}
Salin selepas log masuk

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}
Salin selepas log masuk

在上面的示例中,我们定义了一个名为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)})
Salin selepas log masuk

在上面的示例中,我们添加了一个新的异常处理器,用于捕获InvalidUserIdException异常。它与之前的全局异常处理器有相同的结构,只是处理逻辑不同。在这个处理器中,我们将异常消息转换为字符串,并返回一个带有错误消息的JSONResponse

这样,当我们访问/users/{user_id}这个路由时,如果传入的user_id小于等于0,将会抛出InvalidUserIdException异常。通过特定的异常处理器,我们可以捕获并处理这个异常,并返回一个带有自定义错误消息的JSONResponse

Apabila kami mengakses laluan /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:

Selain menggunakan jenis pengecualian terbina dalam, kami juga boleh menyesuaikan jenis pengecualian untuk membezakan dan mengendalikan pelbagai jenis ralat dengan lebih baik. Berikut ialah contoh pengecualian tersuai:

rrreee

Dalam contoh di atas, kami telah mentakrifkan kelas pengecualian tersuai bernama InvalidUserIdException, 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.
  • Apabila kita menjalankan semula aplikasi, kita akan melihat hasil yang sama seperti sebelum ini. Ini kerana kami tidak menentukan pengendali pengecualian khusus untuk pengecualian tersuai ini. Untuk menangkap dan mengendalikan pengecualian tersuai, kami boleh menambah pengendali pengecualian baharu:
  • rrreee
  • Dalam contoh di atas, kami telah menambah pengendali pengecualian baharu untuk menangkap pengecualian 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.
Dengan cara ini, apabila kita mengakses laluan /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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan