


Cara melaksanakan pengendalian ralat dan pengecualian tersuai dalam FastAPI
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. - 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 mengembalikanJSONResponse
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Gunakan middleware untuk meningkatkan pengendalian ralat dalam fungsi Go: Memperkenalkan konsep middleware, yang boleh memintas panggilan fungsi dan melaksanakan logik tertentu. Buat perisian tengah pengendalian ralat yang membungkus logik pengendalian ralat dalam fungsi tersuai. Gunakan middleware untuk membalut fungsi pengendali supaya logik pengendalian ralat dilakukan sebelum fungsi dipanggil. Mengembalikan kod ralat yang sesuai berdasarkan jenis ralat, улучшениеобработкиошибоквфункциях Goспомощьюпромежуточногопрограммногообеспечения.Оноспечечения.Онооть познамочения. ошибо

Dalam C++, pengendalian pengecualian mengendalikan ralat dengan anggun melalui blok try-catch Jenis pengecualian biasa termasuk ralat masa jalan, ralat logik dan ralat luar sempadan. Ambil pengendalian ralat pembukaan fail sebagai contoh Apabila program gagal membuka fail, ia akan membuang pengecualian dan mencetak mesej ralat dan mengembalikan kod ralat melalui blok tangkapan, dengan itu mengendalikan ralat tanpa menamatkan program. Pengendalian pengecualian memberikan kelebihan seperti pemusatan pengendalian ralat, penyebaran ralat dan keteguhan kod.

Ralat pengendalian dan log masuk dalam reka bentuk kelas C++ termasuk: Pengendalian pengecualian: menangkap dan mengendalikan pengecualian, menggunakan kelas pengecualian tersuai untuk memberikan maklumat ralat khusus. Kod ralat: Gunakan integer atau penghitungan untuk mewakili keadaan ralat dan mengembalikannya dalam nilai pulangan. Penegasan: Sahkan syarat pra dan pasca, dan buang pengecualian jika ia tidak dipenuhi. Pengelogan perpustakaan C++: pengelogan asas menggunakan std::cerr dan std::clog. Perpustakaan pengelogan luaran: Integrasikan perpustakaan pihak ketiga untuk ciri lanjutan seperti penapisan tahap dan putaran fail log. Kelas log tersuai: Buat kelas log anda sendiri, abstrak mekanisme asas dan sediakan antara muka biasa untuk merekodkan tahap maklumat yang berbeza.

Alat dan perpustakaan pengendalian ralat terbaik dalam PHP termasuk: Kaedah terbina dalam: set_error_handler() dan error_get_last() Kit alat pihak ketiga: Whoops (penyahpepijat dan pemformatan ralat) Perkhidmatan pihak ketiga: Sentry (pelaporan dan pemantauan ralat) Pihak ketiga perpustakaan: PHP-error-handler (pengelogan ralat tersuai dan jejak tindanan) dan Monolog (pengendali pengelogan ralat)

Dalam fungsi Go, pengendalian ralat tak segerak menggunakan saluran ralat untuk menghantar ralat daripada goroutin secara tak segerak. Langkah-langkah khusus adalah seperti berikut: Cipta saluran ralat. Mulakan goroutine untuk melaksanakan operasi dan menghantar ralat secara tidak segerak. Gunakan pernyataan pilih untuk menerima ralat daripada saluran. Mengendalikan ralat secara tidak segerak, seperti mencetak atau mengelog mesej ralat. Pendekatan ini meningkatkan prestasi dan kebolehskalaan kod serentak kerana pengendalian ralat tidak menyekat urutan panggilan dan pelaksanaan boleh dibatalkan.

Pengecualian tersuai digunakan untuk mencipta mesej ralat dan mengendalikan logik. Pertama, anda perlu mewarisi Exception atau RuntimeException untuk mencipta kelas pengecualian tersuai. Kemudian, anda boleh mengatasi kaedah getMessage() untuk menetapkan mesej pengecualian. Pengecualian dilemparkan melalui kata kunci lontaran. Gunakan blok cuba-tangkap untuk mengendalikan pengecualian tersuai. Artikel ini menyediakan kes praktikal untuk menghuraikan input integer dan melontar InvalidInputException tersuai apabila input bukan integer.

Amalan terbaik untuk pengendalian ralat dalam Go termasuk: menggunakan jenis ralat, sentiasa mengembalikan ralat, menyemak ralat, menggunakan pulangan berbilang nilai, menggunakan ralat sentinel dan menggunakan pembalut ralat. Contoh praktikal: Dalam pengendali permintaan HTTP, jika ReadDataFromDatabase mengembalikan ralat, kembalikan respons ralat 500.

Dalam ujian unit fungsi Go, terdapat dua strategi utama untuk pengendalian ralat: 1. Wakilkan ralat sebagai nilai khusus jenis ralat, yang digunakan untuk menegaskan nilai yang dijangkakan 2. Gunakan saluran untuk menghantar ralat kepada fungsi ujian; yang sesuai untuk menguji kod serentak. Dalam kes praktikal, strategi nilai ralat digunakan untuk memastikan fungsi mengembalikan 0 untuk input negatif.
