Maison développement back-end Tutoriel Python 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

Jul 29, 2023 pm 07:00 PM
Gestion des erreurs fastapi Exceptions personnalisées

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

Lorsque nous accédons à la route /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 :

En plus d'utiliser les types d'exceptions intégrés, nous pouvons également personnaliser les types d'exceptions pour mieux distinguer et gérer les différents types d'erreurs. Voici un exemple d'exception personnalisée :

rrreee

Dans l'exemple ci-dessus, nous avons défini une classe d'exception personnalisée nommée InvalidUserIdException, 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 une JSONResponse avec le message d'erreur.
De cette façon, lorsque nous accédons à la route /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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Sujets chauds

Tutoriel PHP
1535
276
Comment gérer efficacement les scénarios d'erreur en C++ grâce à la gestion des exceptions ? Comment gérer efficacement les scénarios d'erreur en C++ grâce à la gestion des exceptions ? Jun 02, 2024 pm 12:38 PM

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.

Traitement asynchrone dans la gestion des erreurs de la fonction Golang Traitement asynchrone dans la gestion des erreurs de la fonction Golang May 03, 2024 pm 03:06 PM

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.

Meilleurs outils et bibliothèques pour la gestion des erreurs PHP ? Meilleurs outils et bibliothèques pour la gestion des erreurs PHP ? May 09, 2024 pm 09:51 PM

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)

Comment utiliser le wrapper d'erreur de Golang ? Comment utiliser le wrapper d'erreur de Golang ? Jun 03, 2024 pm 04:08 PM

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.

Comment effectuer la gestion des erreurs et la journalisation dans la conception de classes C++ ? Comment effectuer la gestion des erreurs et la journalisation dans la conception de classes C++ ? Jun 02, 2024 am 09:45 AM

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.

Création et utilisation d'exceptions personnalisées Java Création et utilisation d'exceptions personnalisées Java May 03, 2024 pm 10:27 PM

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.

Internationalisation dans la gestion des erreurs de la fonction Golang Internationalisation dans la gestion des erreurs de la fonction Golang May 05, 2024 am 09:24 AM

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 ».

Comment tester la gestion des erreurs dans Golang ? Comment tester la gestion des erreurs dans Golang ? Jun 03, 2024 pm 05:00 PM

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.

See all articles