Validace vstupu a zpracování chyb
Validace vstupu a zpracování chyb
Aspose.BarCode FOSS pro Python ověřuje veškerá vstupní data před kódováním. Každá symbolika má dedikovanou podtřídu InputParser, která kontroluje znakové sady, omezení délky a pravidla formátu. Když ověření selže, knihovna vyvolá typované výjimky z hierarchie BarcodeError, aby volající mohli rozlišovat mezi problémy se vstupem, selháními kódování a problémy s vykreslováním.
Vrstva InputParser
Každá symbolika zaregistruje implementaci InputParser. Když zavoláte BarcodeService.generate(), nejprve se spustí parser, který vytvoří NormalizedPayload nebo vyvolá InvalidInputError, pokud data nejsou pro tuto symboliku platná.
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)Každý parser symboliky ověřuje různá pravidla:
Code128InputParser— kontroluje, že všechny znaky jsou v rozsahu ASCII podporovaném znakové sadě Code 128Code39InputParser— ověřuje znaky vůči základnímu nebo plnému ASCII abecednímu souboru Code 39 v závislosti naCode39Options.full_asciiEan13InputParser— vyžaduje přesně 12 nebo 13 číselných číslic (13. je kontrolní číslice)Ean8InputParser— vyžaduje přesně 7 nebo 8 číselných číslicQrInputParser— ověřuje data vůči vybranémuQrEncodeMode(NUMERIC, ALPHANUMERIC, BYTE, or KANJI)UpcaInputParser— vyžaduje přesně 11 nebo 12 číselných číslicUpceInputParser— vyžaduje přesně 6, 7 nebo 8 číselných číslic s platným vzorem UPC-E
Hierarchie BarcodeError
Všechny výjimky dědí z BarcodeError, který rozšiřuje vestavěný Exception třídy Python. Hierarchie umožňuje bloky catch na různých úrovních specifikace:
| Exception | Vyvoláno, když |
|---|---|
BarcodeError | Základní třída pro všechny výjimky knihovny |
InvalidInputError | Vstupní data neprojdou validací (špatné znaky, nesprávná délka) |
EncodingError | Kódovací logika selže po úspěšné validaci |
RenderingError | Vykreslovač narazí na chybu během výstupu SVG nebo PNG |
SymbologyNotFoundError | Název symboliky není registrován v SymbologyRegistry |
UnsupportedCapabilityError | Požadovaná funkce není pro symboliku k dispozici |
UnsupportedFeatureError | Funkce je definována, ale není implementována |
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}")Ověřování názvů symboliky
SymbologyNotFoundError je vyvoláno, když BarcodeService.generate() obdrží název symboliky, který není registrován. SymbologyRegistry rozpoznává názvy podle kanonického názvu nebo aliasu, takže "code128", "Code128" a "CODE128" všechny odkazují na stejnou definici.
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}")Validace kontrolní číslice
EAN-13, EAN-8, UPC-A a UPC-E symboliky automaticky vypočítávají kontrolní číslice. Pokud předáte kompletní data včetně kontrolní číslice, parser ji ověří oproti vypočtené hodnotě. Vlastnost allow_check_digit_input na Ean13Options a Ean8Options řídí toto chování.
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),
)Tipy a osvědčené postupy
- Zachyťte
InvalidInputErrorpro uživatelské vstupní formuláře, kde data nemusí splňovat požadavky symboliky - Použijte
BarcodeErrorjako zachytávač všeho jen v případě, že nepotřebujete rozlišovat mezi typy chyb - Zkontrolujte název symboliky oproti sedmi podporovaným symbolikám (code128, code39, ean13, ean8, qrcode, upca, upce) před voláním
generate(), abyste se vyhnuliSymbologyNotFoundError - U QR kódů nastavte
encoding_modeexplicitně pomocíQrOptions, když data obsahují ne-ASCII znaky - Nechte knihovnu vypočítat kontrolní číslice místo toho, abyste je zadávali ručně — tím se zabrání nesouladu
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
InvalidInputError na EAN-13 | Data mají méně než 12 číslic nebo obsahují nečíselné znaky | Zadejte přesně 12 nebo 13 číselných číslic |
SymbologyNotFoundError | Chyba v názvu symboliky (např. "code_128" místo "code128") | Použijte kanonický název bez podtržítek |
EncodingError na Code 39 | Data obsahují malá písmena bez full_ascii=True | Nastavit Code39Options(full_ascii=True) |
UnsupportedFeatureError | Volání funkce, která je definována, ale ještě není implementována | Zkontrolujte known_limitations v profilu symboliky |
InvalidInputError na UPC-A | Data obsahují více než 12 číslic | Zadejte přesně 11 nebo 12 číslic |
FAQ
Jak mohu zkontrolovat, zda je název symboliky platný před generováním?
Použijte BarcodeService.registry k přístupu k SymbologyRegistry. Zavolejte get_definition() a zachyťte SymbologyNotFoundError, pokud není název registrován.
Mohu zakázat validaci kontrolní číslice pro čárové kódy EAN?
Parser vždy ověřuje kontrolní číslice, když zadáte vstup v plné délce (13 číslic pro EAN-13, 8 pro EAN-8). Chcete-li validaci vyhnout, zadejte pouze datové číslice (12 pro EAN-13, 7 pro EAN-8) a nechte knihovnu vypočítat kontrolní číslici.
Co se stane, když předám binární data symbolice 1D čárového kódu?
InvalidInputError je vyvolána. Code 128, Code 39, EAN a UPC symbologie přijímají pouze textová data. Pro binární data použijte QR Code s QrEncodeMode.BYTE.
Ověřuje knihovna délku dat pro kódy QR?
QrInputParser ověřuje, že data se vejdou do kapacity požadované verze QR. Pokud není verze specifikována, knihovna vybere nejmenší verzi, která data pojme.
API Reference Shrnutí
| Třída / Metoda | Popis: |
|---|---|
InputParser.parse(data, options) | Abstraktní metoda — validuje a normalizuje vstup do NormalizedPayload |
Code128InputParser.parse(data, options) | Validuje vstupní znaky Code 128 |
Code39InputParser.parse(data, options) | Validuje Code 39 základní nebo plný ASCII vstup |
Ean13InputParser.parse(data, options) | Ověřuje počet číslic EAN-13 a kontrolní číslici |
Ean8InputParser.parse(data, options) | Ověřuje počet číslic EAN-8 a kontrolní číslici |
QrInputParser.parse(data, options) | Ověřuje data QR podle vybraného režimu kódování |
UpcaInputParser.parse(data, options) | Ověřuje počet číslic UPC-A |
UpceInputParser.parse(data, options) | Ověřuje počet číslic a vzor UPC-E |
BarcodeError | Základní výjimka pro knihovnu čárových kódů |
InvalidInputError | Vyvolána při neplatných vstupních datech |
EncodingError | Vyvolána při selhání kódování |
RenderingError | Vyvoláno, když selže vykreslování |
SymbologyNotFoundError | Vyvoláno pro neregistrované názvy symboliky |
UnsupportedCapabilityError | Vyvoláno pro nedostupné schopnosti |
UnsupportedFeatureError | Vyvoláno pro neimplementované funkce |