


Comment implémenter la gestion des erreurs et les exceptions personnalisées dans FastAPI
Comment implémenter la gestion des erreurs et les exceptions personnalisées dans FastAPI
Introduction :
FastAPI est un framework Web moderne basé sur Python. Ses hautes performances et ses capacités de développement rapide le rendent de plus en plus populaire dans le domaine du développement. Dans les applications réelles, des erreurs et des exceptions sont souvent rencontrées. Cet article explique comment implémenter la gestion des erreurs et les exceptions personnalisées dans FastAPI pour aider les développeurs à mieux gérer les situations d'erreur dans les applications.
Gestion des erreurs FastAPI :
FastAPI fournit un mécanisme de gestion des exceptions intégré. En utilisant des gestionnaires d'exceptions ou des décorateurs, nous pouvons capturer et gérer les erreurs dans l'application. Voici un exemple de base de gestion des erreurs :
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}
Dans l'exemple ci-dessus, nous utilisons le décorateur @app.exception_handler
pour définir un gestionnaire d'exceptions global. Il accepte deux paramètres, le premier paramètre est le type d'exception à gérer et le deuxième paramètre est une fonction de rappel utilisée pour gérer l'exception. Dans cet exemple, nous interceptons toutes les exceptions Exception
et renvoyons une JSONResponse
avec un message d'erreur personnalisé. @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}
, si le user_id
entrant est inférieur ou égal à 0, une exception personnalisée sera levée. Grâce au gestionnaire d'exceptions global défini ci-dessus, nous pouvons intercepter et gérer cette exception et renvoyer une JSONResponse
avec un message d'erreur.
Exceptions personnalisées :
rrreee
Dans l'exemple ci-dessus, nous avons défini une classe d'exception personnalisée nomméeInvalidUserIdException
, qui hérite de la classe Exception
. Nous acceptons également un paramètre user_id
dans le constructeur pour afficher l'ID utilisateur spécifique dans le message d'exception. Dans la fonction de traitement de routage, lorsque user_id
est inférieur ou égal à 0, nous levons cette exception personnalisée. - Lorsque nous exécuterons à nouveau l'application, nous verrons les mêmes résultats qu'avant. En effet, nous n'avons pas défini de gestionnaire d'exception spécifique pour cette exception personnalisée. Afin de détecter et de gérer les exceptions personnalisées, nous pouvons ajouter un nouveau gestionnaire d'exceptions : rrreee
- Dans l'exemple ci-dessus, nous avons ajouté un nouveau gestionnaire d'exceptions pour détecter les exceptions
InvalidUserIdException
. Il a la même structure que le gestionnaire d'exceptions global précédent, mais la logique de traitement est différente. Dans ce gestionnaire, nous convertissons le message d'exception en chaîne et renvoyons uneJSONResponse
avec le message d'erreur.
/users/{user_id}
, si le user_id
entrant est inférieur ou égal à 0, InvalidUserIdException le code sera lancé code>Exception. Avec un gestionnaire d'exceptions spécifique, nous pouvons intercepter et gérer cette exception et renvoyer une <code>JSONResponse
avec un message d'erreur personnalisé. 🎜🎜Résumé : 🎜En utilisant le mécanisme de gestion des erreurs de FastAPI, nous pouvons mieux gérer et gérer les situations d'erreur dans nos applications. Nous pouvons utiliser un gestionnaire d'exceptions global pour intercepter et gérer toutes les exceptions, ou nous pouvons définir des gestionnaires d'exceptions spécifiques pour gérer des types d'exceptions spécifiques. Dans le même temps, nous pouvons également personnaliser les classes d’exceptions pour mieux distinguer et gérer les différents types d’erreurs, améliorant ainsi la lisibilité et la maintenabilité du code. 🎜🎜Lien de référence : 🎜🎜🎜Documentation officielle de FastAPI : https://fastapi.tiangolo.com/tutorial/handling-errors/🎜🎜Documentation officielle de Python : https://docs.python.org/3/tutorial/errors. html🎜🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

En C++, la gestion des exceptions gère les erreurs de manière gracieuse via des blocs try-catch. Les types d'exceptions courants incluent les erreurs d'exécution, les erreurs logiques et les erreurs hors limites. Prenons l'exemple de la gestion des erreurs d'ouverture de fichier. Lorsque le programme ne parvient pas à ouvrir un fichier, il lève une exception, imprime le message d'erreur et renvoie le code d'erreur via le bloc catch, gérant ainsi l'erreur sans mettre fin au programme. La gestion des exceptions offre des avantages tels que la centralisation de la gestion des erreurs, la propagation des erreurs et la robustesse du code.

Dans les fonctions Go, la gestion asynchrone des erreurs utilise des canaux d'erreur pour transmettre de manière asynchrone les erreurs des goroutines. Les étapes spécifiques sont les suivantes : Créez un canal d'erreur. Démarrez une goroutine pour effectuer des opérations et envoyer des erreurs de manière asynchrone. Utilisez une instruction select pour recevoir les erreurs du canal. Gérez les erreurs de manière asynchrone, telles que l'impression ou la journalisation des messages d'erreur. Cette approche améliore les performances et l'évolutivité du code concurrent car la gestion des erreurs ne bloque pas le thread appelant et l'exécution peut être annulée.

Les meilleurs outils et bibliothèques de gestion des erreurs en PHP incluent : Méthodes intégrées : set_error_handler() et error_get_last() Boîtes à outils tierces : Whoops (débogage et formatage des erreurs) Services tiers : Sentry (rapport et surveillance des erreurs) Tiers bibliothèques : PHP-error-handler (journalisation des erreurs personnalisées et traces de pile) et Monolog (gestionnaire de journalisation des erreurs)

Dans Golang, les wrappers d'erreurs vous permettent de créer de nouvelles erreurs en ajoutant des informations contextuelles à l'erreur d'origine. Cela peut être utilisé pour unifier les types d'erreurs générées par différentes bibliothèques ou composants, simplifiant ainsi le débogage et la gestion des erreurs. Les étapes sont les suivantes : Utilisez la fonction error.Wrap pour envelopper les erreurs d'origine dans de nouvelles erreurs. La nouvelle erreur contient des informations contextuelles de l'erreur d'origine. Utilisez fmt.Printf pour générer des erreurs encapsulées, offrant ainsi plus de contexte et de possibilités d'action. Lors de la gestion de différents types d’erreurs, utilisez la fonction erreurs.Wrap pour unifier les types d’erreurs.

La gestion des erreurs et la journalisation dans la conception des classes C++ incluent : Gestion des exceptions : détection et gestion des exceptions, utilisation de classes d'exceptions personnalisées pour fournir des informations d'erreur spécifiques. Code d'erreur : utilisez un entier ou une énumération pour représenter la condition d'erreur et renvoyez-la dans la valeur de retour. Assertion : vérifiez les conditions préalables et postérieures et lancez une exception si elles ne sont pas remplies. Journalisation de la bibliothèque C++ : journalisation de base à l'aide de std::cerr et std::clog. Bibliothèques de journalisation externes : intégrez des bibliothèques tierces pour des fonctionnalités avancées telles que le filtrage de niveau et la rotation des fichiers journaux. Classe de journal personnalisée : créez votre propre classe de journal, résumez le mécanisme sous-jacent et fournissez une interface commune pour enregistrer différents niveaux d'informations.

Les exceptions personnalisées sont utilisées pour créer des messages d'erreur et gérer la logique. Tout d’abord, vous devez hériter d’Exception ou RuntimeException pour créer une classe d’exception personnalisée. Ensuite, vous pouvez remplacer la méthode getMessage() pour définir le message d'exception. Les exceptions sont levées via le mot-clé throw. Utilisez des blocs try-catch pour gérer les exceptions personnalisées. Cet article fournit un cas pratique pour analyser une entrée entière et lancer une InvalidInputException personnalisée lorsque l'entrée n'est pas un entier.

Les fonctions GoLang peuvent effectuer l'internationalisation des erreurs via les fonctions Wrapf et Errorf du package d'erreurs, créant ainsi des messages d'erreur localisés et les ajoutant à d'autres erreurs pour former des erreurs de niveau supérieur. En utilisant la fonction Wrapf, vous pouvez internationaliser les erreurs de bas niveau et ajouter des messages personnalisés, tels que « Erreur d'ouverture du fichier %s ».

Les méthodes courantes pour tester la gestion des erreurs dans Go incluent : l'utilisation de error.Error() pour vérifier si le message d'erreur est une chaîne vide ; l'utilisation de testing.T.FatalError() et testing.T.Errorf() pour afficher le message d'erreur et le marquer ; le test est considéré comme ayant échoué ou continue l'exécution ; utilisez les fonctions d'assertion require, telles que require.NoError et require.EqualError, pour arrêter le test en cas d'échec.
