Invoervalidatie en foutafhandeling

Invoervalidatie en foutafhandeling

Invoervalidatie en foutafhandeling

Aspose.BarCode FOSS for Python valideert alle invoergegevens vóór het coderen. Elke symbologie heeft een toegewijde InputParser subklasse die tekensets, lengtbeperkingen en opmaakregels controleert. Wanneer validatie faalt, werpt de bibliotheek getypeerde uitzonderingen uit de BarcodeError hiërarchie zodat aanroepers kunnen onderscheiden tussen invoerproblemen, coderingsfouten en renderingsproblemen.


De InputParser laag

Elke symbologie registreert een InputParser implementatie. Wanneer je BarcodeService.generate() aanroept, wordt de parser eerst uitgevoerd, waardoor een NormalizedPayload wordt geproduceerd of InvalidInputError wordt opgegooid als de gegevens niet geldig zijn voor die 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)

Elke symbologie-parser valideert verschillende regels:

  • Code128InputParser — controleert of alle tekens binnen het ASCII-bereik vallen dat wordt ondersteund door Code 128 tekensets
  • Code39InputParser — valideert tekens tegen het Code 39 basis- of volledige ASCII-alfabet, afhankelijk van Code39Options.full_ascii
  • Ean13InputParser — vereist precies 12 of 13 numerieke cijfers (13e is het controlecijfer)
  • Ean8InputParser — vereist precies 7 of 8 numerieke cijfers
  • QrInputParser — valideert gegevens tegen de geselecteerde QrEncodeMode (NUMERIC, ALPHANUMERIC, BYTE, of KANJI)
  • UpcaInputParser — vereist precies 11 of 12 numerieke cijfers
  • UpceInputParser — vereist precies 6, 7 of 8 numerieke cijfers met een geldig UPC-E-patroon

De BarcodeError hiërarchie

Alle uitzonderingen erven van BarcodeError, die de ingebouwde Exception van Python uitbreidt. De hiërarchie maakt catch-blokken op verschillende niveaus van specificiteit mogelijk:

ExceptionWordt opgegooid wanneer
BarcodeErrorBasisklasse voor alle bibliotheekexcepties
InvalidInputErrorInvoergegevens falen validatie (verkeerde tekens, verkeerde lengte)
EncodingErrorCoderingslogica faalt nadat validatie slaagt
RenderingErrorRenderer ondervindt een fout tijdens SVG- of PNG-uitvoer
SymbologyNotFoundErrorDe naam van de symbologie is niet geregistreerd in SymbologyRegistry
UnsupportedCapabilityErrorEen gevraagde functionaliteit is niet beschikbaar voor de symbologie
UnsupportedFeatureErrorEen functie is gedefinieerd maar niet geïmplementeerd
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}")

Symbologie-namen valideren

SymbologyNotFoundError wordt opgegooid wanneer BarcodeService.generate() een symbologie-naam ontvangt die niet geregistreerd is. De SymbologyRegistry lost namen op via de canonieke naam of alias, zodat "code128", "Code128" en "CODE128" allemaal naar dezelfde definitie verwijzen.

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}")

Controlecijfervalidatie

EAN-13, EAN-8, UPC-A en UPC-E symbologieën berekenen automatisch controlecijfers. Als je de volledige gegevens inclusief een controlecijfer doorgeeft, verifieert de parser dit ten opzichte van de berekende waarde. De allow_check_digit_input-eigenschap op Ean13Options en Ean8Options bepaalt dit gedrag.

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),
)

Tips en best practices

  • Vang InvalidInputError op voor gebruiksvriendelijke invoervelden waar gegevens mogelijk niet aan de symbologie-vereisten voldoen.
  • Gebruik BarcodeError als een vangnet alleen wanneer je geen onderscheid hoeft te maken tussen fouttypen.
  • Controleer de symbologie-naam tegen de zeven ondersteunde symbologieën (code128, code39, ean13, ean8, qrcode, upca, upce) voordat je generate() aanroept om SymbologyNotFoundError te voorkomen.
  • Voor QR-codes stel je encoding_mode expliciet in via QrOptions wanneer de gegevens niet-ASCII-tekens bevatten.
  • Laat de bibliotheek controlecijfers berekenen in plaats van ze handmatig op te geven — dit voorkomt mismatches

Veelvoorkomende problemen

ProbleemOorzaakOplossing
InvalidInputError op EAN-13Gegevens hebben minder dan 12 cijfers of bevatten niet-numerieke tekensGeef precies 12 of 13 numerieke cijfers op
SymbologyNotFoundErrorTypfout in symboolnaam (bijv. "code_128" in plaats van "code128")Gebruik de canonieke naam zonder underscores
EncodingError op Code 39Gegevens bevatten kleine letters zonder full_ascii=TrueInstellen Code39Options(full_ascii=True)
UnsupportedFeatureErrorEen functie aanroepen die is gedefinieerd maar nog niet geïmplementeerdControleer known_limitations op het symbologieprofiel
InvalidInputError op UPC-AData heeft meer dan 12 cijfersGeef precies 11 of 12 numerieke cijfers

FAQ

Hoe controleer ik of een symbologie-naam geldig is voordat ik genereer?

Gebruik BarcodeService.registry om toegang te krijgen tot de SymbologyRegistry. Roep get_definition() aan en vang SymbologyNotFoundError op als de naam niet geregistreerd is.

Kan ik de validatie van controlecijfers voor EAN-streepjescodes uitschakelen?

De parser valideert altijd controlecijfers wanneer je de invoer van volledige lengte opgeeft (13 cijfers voor EAN-13, 8 voor EAN-8). Om validatie te vermijden, geef alleen de datacijfers op (12 voor EAN-13, 7 voor EAN-8) en laat de bibliotheek het controlecijfer berekenen.

Wat gebeurt er als ik binaire data doorgeef aan een 1D-barcode-symbologie?

InvalidInputError wordt opgegooid. Code 128, Code 39, EAN en UPC symbologieën accepteren alleen tekstgegevens. Voor binaire gegevens, gebruik QR Code met QrEncodeMode.BYTE.

Valideert de bibliotheek de gegevenslengte voor QR-codes?

QrInputParser controleert of de gegevens binnen de capaciteit van de gevraagde QR-versie passen. Als er geen versie is opgegeven, kiest de bibliotheek de kleinste versie die de gegevens kan bevatten.


API Reference Samenvatting

Klasse / MethodeBeschrijving
InputParser.parse(data, options)Abstracte methode — valideert en normaliseert invoer naar NormalizedPayload
Code128InputParser.parse(data, options)Valideert Code 128 invoerkarakters
Code39InputParser.parse(data, options)Valideert Code 39 basis- of volledige ASCII-invoer
Ean13InputParser.parse(data, options)Valideert het aantal cijfers van EAN-13 en het controlecijfer
Ean8InputParser.parse(data, options)Valideert het aantal cijfers van EAN-8 en het controlecijfer
QrInputParser.parse(data, options)Valideert QR gegevens tegen de geselecteerde coderingsmodus
UpcaInputParser.parse(data, options)Valideert het aantal cijfers van UPC-A
UpceInputParser.parse(data, options)Valideert UPC-E cijfertelling en patroon
BarcodeErrorBasisuitzondering voor de barcodebibliotheek
InvalidInputErrorWordt opgegooid bij ongeldige invoergegevens
EncodingErrorWordt opgegooid wanneer codering mislukt
RenderingErrorWordt opgegooid wanneer weergave mislukt
SymbologyNotFoundErrorOpgetreden bij niet-geregistreerde symbologie-namen
UnsupportedCapabilityErrorOpgetreden bij niet-beschikbare mogelijkheden
UnsupportedFeatureErrorOpgetreden bij niet-geïmplementeerde functies

Zie ook

 Nederlands