Gérer les erreurs¶
Objectif : réagir proprement à une entrée invalide.
Ce que vous allez apprendre : le paquet lève QrCodeError dans deux cas, un
texte vide (ou composé uniquement d'espaces) et un format de sortie inconnu.
QrCodeError hérite de ValueError : un contrôleur peut la rattraper comme une
erreur d'entrée ordinaire.
Premier palier du niveau avancé.
Ce que ce starter montre¶
- déclencher
QrCodeErrorsur un texte vide ; - rattraper l'erreur dans un contrôleur pour renvoyer une réponse claire.
1. Les cas d'erreur¶
from forge_mvc_qrcode import QrCode, QrCodeResponse, QrCodeError
try:
QrCode.from_text("") # texte vide
except QrCodeError as erreur:
print(erreur)
try:
QrCodeResponse.from_text("ok", fmt="pdf") # format inconnu
except QrCodeError as erreur:
print(erreur)
Comprendre ce code¶
- Un texte vide ou seulement composé d'espaces est refusé : un QR Code vide n'a pas de sens.
- Un
fmtautre que"png"ou"svg"est refusé. - Le message d'erreur indique la cause de façon explicite.
2. Rattraper dans un contrôleur¶
from core.http.request import Request
from core.http.response import Response
from core.mvc.controller.base_controller import BaseController
from forge_mvc_qrcode import QrCodeResponse, QrCodeError
class QrCodeController(BaseController):
@staticmethod
def show(request: Request) -> Response:
cible = request.query("url", "")
try:
return QrCodeResponse.from_text(cible)
except QrCodeError:
return Response.text("URL manquante ou invalide.", status=400)
Comprendre ce code¶
- L'application lit l'URL à encoder, ici depuis la requête.
- Si elle est vide,
QrCodeResponse.from_textlèveQrCodeError. - Le contrôleur renvoie alors une réponse
400explicite plutôt qu'une erreur serveur.
À retenir¶
QrCodeErrorcouvre le texte vide et le format inconnu.- Elle hérite de
ValueError, donc se rattrape comme une erreur d'entrée.
Après ce starter¶
Les erreurs sont sous contrôle.
Réglons maintenant les options de rendu.