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. 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. /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!