Comment implémenter la gestion des erreurs et les exceptions personnalisées dans FastAPI

WBOY
Libérer: 2023-07-29 19:00:33
original
2357 Les gens l'ont consulté

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}
Copier après la connexion

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}
Copier après la connexion

在上面的示例中,我们定义了一个名为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)})
Copier après la connexion

在上面的示例中,我们添加了一个新的异常处理器,用于捕获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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!