Validation des entrées et gestion des erreurs

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 128
  • Code39InputParser — valide les caractères par rapport à l’alphabet de base Code 39 ou à l’alphabet ASCII complet selon Code39Options.full_ascii
  • Ean13InputParser — 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ériques
  • QrInputParser — valide les données par rapport au QrEncodeMode sélectionné (NUMERIC, ALPHANUMERIC, BYTE ou KANJI)
  • UpcaInputParser — nécessite exactement 11 ou 12 chiffres numériques
  • UpceInputParser — 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é:

ExceptionDéclenché lorsque
BarcodeErrorClasse de base pour toutes les exceptions de la bibliothèque
InvalidInputErrorLes données d’entrée échouent à la validation (caractères incorrects, longueur incorrecte)
EncodingErrorLa logique d’encodage échoue après que la validation a réussi
RenderingErrorLe rendu rencontre une erreur lors de la sortie SVG ou PNG
SymbologyNotFoundErrorLe nom de la symbologie n’est pas enregistré dans SymbologyRegistry
UnsupportedCapabilityErrorUne capacité demandée n’est pas disponible pour la symbologie
UnsupportedFeatureErrorUne 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 InvalidInputError pour les formulaires d’entrée destinés aux utilisateurs où les données pourraient ne pas répondre aux exigences de la symbologie
  • Utilisez BarcodeError comme 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’éviter SymbologyNotFoundError
  • Pour les codes QR, définissez encoding_mode explicitement via QrOptions lorsque 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èmeCauseCorrection
InvalidInputError sur EAN-13Les données contiennent moins de 12 chiffres ou des caractères non numériquesFournissez exactement 12 ou 13 chiffres numériques
SymbologyNotFoundErrorFaute 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 39Les données contiennent des lettres minuscules sans full_ascii=TrueDéfinir Code39Options(full_ascii=True)
UnsupportedFeatureErrorAppel d’une fonctionnalité définie mais pas encore implémentéeVérifiez known_limitations sur le profil de symbologie
InvalidInputError sur UPC-ALes données comportent plus de 12 chiffresFournissez 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éthodeDescription
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
BarcodeErrorException de base pour la bibliothèque de codes-barres
InvalidInputErrorLevée pour des données d’entrée invalides
EncodingErrorLevée lorsque l’encodage échoue
RenderingErrorLevée lorsque le rendu échoue
SymbologyNotFoundErrorDéclenchée pour les noms de symbologie non enregistrés
UnsupportedCapabilityErrorDéclenchée pour les capacités indisponibles
UnsupportedFeatureErrorDéclenchée pour les fonctionnalités non implémentées

Voir aussi

 Français