Validation des entrées et gestion des erreurs
Validation des entrées et gestion des erreurs
Aspose.BarCode FOSS for Python valide toutes les données d’entrée avant l’encodage. Chaque symbologie possède une sous-classe InputParser dédiée qui vérifie les jeux de caractères, les contraintes de longueur et les règles de format. Lorsque la validation échoue, la bibliothèque lève des exceptions typées provenant de la hiérarchie BarcodeError afin que les appelants puissent distinguer les problèmes d’entrée, les échecs d’encodage et les problèmes de rendu.
La couche InputParser
Chaque symbologie enregistre une implémentation InputParser. Lorsque vous appelez BarcodeService.generate(), l’analyseur s’exécute d’abord, produisant un NormalizedPayload ou levant InvalidInputError si les données ne sont pas valides pour cette symbologie.
from aspose_barcode_foss import BarcodeService
service = BarcodeService()
# Valid Code 128 input — passes the Code128InputParser
barcode = service.generate("code128", "VALID-DATA-001")
# Invalid EAN-13 input — too few digits
try:
barcode = service.generate("ean13", "123")
except Exception as e:
print(type(e).__name__, e)Chaque analyseur de symbologie valide des règles différentes :
Code128InputParser— vérifie que tous les caractères sont dans la plage ASCII prise en charge par les jeux de caractères Code 128Code39InputParser— valide les caractères par rapport à l’alphabet de base Code 39 ou à l’alphabet ASCII complet selonCode39Options.full_asciiEan13InputParser— nécessite exactement 12 ou 13 chiffres numériques (le 13e est le chiffre de contrôle)Ean8InputParser— nécessite exactement 7 ou 8 chiffres numériquesQrInputParser— valide les données par rapport auQrEncodeModesélectionné (NUMERIC, ALPHANUMERIC, BYTE ou KANJI)UpcaInputParser— nécessite exactement 11 ou 12 chiffres numériquesUpceInputParser— nécessite exactement 6, 7 ou 8 chiffres numériques avec un motif UPC-E valide
La hiérarchie BarcodeError
Toutes les exceptions héritent de BarcodeError, qui étend le Exception intégré de Python. La hiérarchie permet des blocs catch à différents niveaux de spécificité:
| Exception | Déclenché lorsque |
|---|---|
BarcodeError | Classe de base pour toutes les exceptions de la bibliothèque |
InvalidInputError | Les données d’entrée échouent à la validation (caractères incorrects, longueur incorrecte) |
EncodingError | La logique d’encodage échoue après que la validation a réussi |
RenderingError | Le rendu rencontre une erreur lors de la sortie SVG ou PNG |
SymbologyNotFoundError | Le nom de la symbologie n’est pas enregistré dans SymbologyRegistry |
UnsupportedCapabilityError | Une capacité demandée n’est pas disponible pour la symbologie |
UnsupportedFeatureError | Une fonctionnalité est définie mais n’est pas implémentée |
from aspose_barcode_foss import BarcodeService
from aspose_barcode_foss.errors import (
BarcodeError,
InvalidInputError,
EncodingError,
SymbologyNotFoundError,
)
service = BarcodeService()
try:
barcode = service.generate("code128", "TEST-001")
svg = barcode.to_svg()
except InvalidInputError as e:
print(f"Input rejected: {e}")
except EncodingError as e:
print(f"Encoding failed: {e}")
except SymbologyNotFoundError as e:
print(f"Unknown symbology: {e}")
except BarcodeError as e:
print(f"Barcode error: {e}")Validation des noms de symbologie
SymbologyNotFoundError est levée lorsque BarcodeService.generate() reçoit un nom de symbologie qui n’est pas enregistré. Le SymbologyRegistry résout les noms par nom canonique ou alias, de sorte que "code128", "Code128" et "CODE128" résolvent tous à la même définition.
from aspose_barcode_foss import BarcodeService
from aspose_barcode_foss.errors import SymbologyNotFoundError
service = BarcodeService()
try:
barcode = service.generate("invalid_type", "data")
except SymbologyNotFoundError as e:
print(f"Not found: {e}")Validation du chiffre de contrôle
EAN-13, EAN-8, UPC-A et UPC-E symbologies calculent automatiquement les chiffres de contrôle. Si vous transmettez les données complètes incluant un chiffre de contrôle, l’analyseur le vérifie par rapport à la valeur calculée. La propriété allow_check_digit_input sur Ean13Options et Ean8Options contrôle ce comportement.
from aspose_barcode_foss import BarcodeService
from aspose_barcode_foss import Ean13Options
service = BarcodeService()
# 12 digits — check digit computed automatically
barcode = service.generate("ean13", "590123412345")
# 13 digits — parser verifies the 13th digit matches the computed value
barcode = service.generate(
"ean13", "5901234123457",
encode=Ean13Options(allow_check_digit_input=True),
)Conseils et bonnes pratiques
- Capturez
InvalidInputErrorpour les formulaires d’entrée destinés aux utilisateurs où les données pourraient ne pas répondre aux exigences de la symbologie - Utilisez
BarcodeErrorcomme attrape-tout uniquement lorsque vous n’avez pas besoin de distinguer les types d’erreur - Vérifiez le nom de la symbologie par rapport aux sept symbologies prises en charge (code128, code39, ean13, ean8, qrcode, upca, upce) avant d’appeler
generate()afin d’éviterSymbologyNotFoundError - Pour les codes QR, définissez
encoding_modeexplicitement viaQrOptionslorsque les données contiennent des caractères non ASCII - Laissez la bibliothèque calculer les chiffres de contrôle plutôt que de les fournir manuellement — cela évite les incohérences
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
InvalidInputError sur EAN-13 | Les données contiennent moins de 12 chiffres ou des caractères non numériques | Fournissez exactement 12 ou 13 chiffres numériques |
SymbologyNotFoundError | Faute de frappe dans le nom de la symbolique (p. ex. "code_128" au lieu de "code128") | Utilisez le nom canonique sans underscores |
EncodingError sur Code 39 | Les données contiennent des lettres minuscules sans full_ascii=True | Définir Code39Options(full_ascii=True) |
UnsupportedFeatureError | Appel d’une fonctionnalité définie mais pas encore implémentée | Vérifiez known_limitations sur le profil de symbologie |
InvalidInputError sur UPC-A | Les données comportent plus de 12 chiffres | Fournissez exactement 11 ou 12 chiffres numériques |
FAQ
Comment vérifier si un nom de symbologie est valide avant de générer ?
Utilisez BarcodeService.registry pour accéder au SymbologyRegistry. Appelez get_definition() et attrapez SymbologyNotFoundError si le nom n’est pas enregistré.
Puis-je désactiver la validation du chiffre de contrôle pour les codes-barres EAN ?
L’analyseur valide toujours les chiffres de contrôle lorsque vous fournissez l’entrée en longueur complète (13 chiffres pour EAN-13, 8 pour EAN-8). Pour éviter la validation, fournissez uniquement les chiffres de données (12 pour EAN-13, 7 pour EAN-8) et laissez la bibliothèque calculer le chiffre de contrôle.
Que se passe-t-il si je transmettrai des données binaires à une symbologie de code-barres 1D ?
InvalidInputError est levée. Code 128, Code 39, EAN et UPC n’acceptent que des données textuelles. Pour les données binaires, utilisez QR Code avec QrEncodeMode.BYTE.
La bibliothèque valide-t-elle la longueur des données pour les codes QR?
QrInputParser vérifie que les données tiennent dans la capacité de la version QR demandée. Si aucune version n’est spécifiée, la bibliothèque sélectionne la plus petite version qui peut contenir les données.
Résumé API Reference
| Classe / Méthode | Description |
|---|---|
InputParser.parse(data, options) | Méthode abstraite — valide et normalise l’entrée en NormalizedPayload |
Code128InputParser.parse(data, options) | Valide les caractères d’entrée Code 128 |
Code39InputParser.parse(data, options) | Valide l’entrée Code 39 de base ou en ASCII complet |
Ean13InputParser.parse(data, options) | Valide le nombre de chiffres de EAN-13 et le chiffre de contrôle |
Ean8InputParser.parse(data, options) | Valide le nombre de chiffres de EAN-8 et le chiffre de contrôle |
QrInputParser.parse(data, options) | Valide les données QR selon le mode d’encodage sélectionné |
UpcaInputParser.parse(data, options) | Valide le nombre de chiffres de UPC-A |
UpceInputParser.parse(data, options) | Valide le nombre de chiffres et le motif de UPC-E |
BarcodeError | Exception de base pour la bibliothèque de codes-barres |
InvalidInputError | Levée pour des données d’entrée invalides |
EncodingError | Levée lorsque l’encodage échoue |
RenderingError | Levée lorsque le rendu échoue |
SymbologyNotFoundError | Déclenchée pour les noms de symbologie non enregistrés |
UnsupportedCapabilityError | Déclenchée pour les capacités indisponibles |
UnsupportedFeatureError | Déclenchée pour les fonctionnalités non implémentées |