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 tekensetsCode39InputParser— valideert tekens tegen het Code 39 basis- of volledige ASCII-alfabet, afhankelijk vanCode39Options.full_asciiEan13InputParser— vereist precies 12 of 13 numerieke cijfers (13e is het controlecijfer)Ean8InputParser— vereist precies 7 of 8 numerieke cijfersQrInputParser— valideert gegevens tegen de geselecteerdeQrEncodeMode(NUMERIC, ALPHANUMERIC, BYTE, of KANJI)UpcaInputParser— vereist precies 11 of 12 numerieke cijfersUpceInputParser— 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:
| Exception | Wordt opgegooid wanneer |
|---|---|
BarcodeError | Basisklasse voor alle bibliotheekexcepties |
InvalidInputError | Invoergegevens falen validatie (verkeerde tekens, verkeerde lengte) |
EncodingError | Coderingslogica faalt nadat validatie slaagt |
RenderingError | Renderer ondervindt een fout tijdens SVG- of PNG-uitvoer |
SymbologyNotFoundError | De naam van de symbologie is niet geregistreerd in SymbologyRegistry |
UnsupportedCapabilityError | Een gevraagde functionaliteit is niet beschikbaar voor de symbologie |
UnsupportedFeatureError | Een 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
InvalidInputErrorop voor gebruiksvriendelijke invoervelden waar gegevens mogelijk niet aan de symbologie-vereisten voldoen. - Gebruik
BarcodeErrorals 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 omSymbologyNotFoundErrorte voorkomen. - Voor QR-codes stel je
encoding_modeexpliciet in viaQrOptionswanneer de gegevens niet-ASCII-tekens bevatten. - Laat de bibliotheek controlecijfers berekenen in plaats van ze handmatig op te geven — dit voorkomt mismatches
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
InvalidInputError op EAN-13 | Gegevens hebben minder dan 12 cijfers of bevatten niet-numerieke tekens | Geef precies 12 of 13 numerieke cijfers op |
SymbologyNotFoundError | Typfout in symboolnaam (bijv. "code_128" in plaats van "code128") | Gebruik de canonieke naam zonder underscores |
EncodingError op Code 39 | Gegevens bevatten kleine letters zonder full_ascii=True | Instellen Code39Options(full_ascii=True) |
UnsupportedFeatureError | Een functie aanroepen die is gedefinieerd maar nog niet geïmplementeerd | Controleer known_limitations op het symbologieprofiel |
InvalidInputError op UPC-A | Data heeft meer dan 12 cijfers | Geef 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 / Methode | Beschrijving |
|---|---|
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 |
BarcodeError | Basisuitzondering voor de barcodebibliotheek |
InvalidInputError | Wordt opgegooid bij ongeldige invoergegevens |
EncodingError | Wordt opgegooid wanneer codering mislukt |
RenderingError | Wordt opgegooid wanneer weergave mislukt |
SymbologyNotFoundError | Opgetreden bij niet-geregistreerde symbologie-namen |
UnsupportedCapabilityError | Opgetreden bij niet-beschikbare mogelijkheden |
UnsupportedFeatureError | Opgetreden bij niet-geïmplementeerde functies |