Validace vstupu a zpracování chyb

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 128
  • Code39InputParser — ověřuje znaky vůči základnímu nebo plnému ASCII abecednímu souboru Code 39 v závislosti na Code39Options.full_ascii
  • Ean13InputParser — vyžaduje přesně 12 nebo 13 číselných číslic (13. je kontrolní číslice)
  • Ean8InputParser — vyžaduje přesně 7 nebo 8 číselných číslic
  • QrInputParser — ověřuje data vůči vybranému QrEncodeMode (NUMERIC, ALPHANUMERIC, BYTE, or KANJI)
  • UpcaInputParser — vyžaduje přesně 11 nebo 12 číselných číslic
  • UpceInputParser — 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:

ExceptionVyvoláno, když
BarcodeErrorZákladní třída pro všechny výjimky knihovny
InvalidInputErrorVstupní data neprojdou validací (špatné znaky, nesprávná délka)
EncodingErrorKódovací logika selže po úspěšné validaci
RenderingErrorVykreslovač narazí na chybu během výstupu SVG nebo PNG
SymbologyNotFoundErrorNázev symboliky není registrován v SymbologyRegistry
UnsupportedCapabilityErrorPožadovaná funkce není pro symboliku k dispozici
UnsupportedFeatureErrorFunkce 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 InvalidInputError pro uživatelské vstupní formuláře, kde data nemusí splňovat požadavky symboliky
  • Použijte BarcodeError jako 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 vyhnuli SymbologyNotFoundError
  • U QR kódů nastavte encoding_mode explicitně 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émPříčinaOprava
InvalidInputError na EAN-13Data mají méně než 12 číslic nebo obsahují nečíselné znakyZadejte přesně 12 nebo 13 číselných číslic
SymbologyNotFoundErrorChyba v názvu symboliky (např. "code_128" místo "code128")Použijte kanonický název bez podtržítek
EncodingError na Code 39Data obsahují malá písmena bez full_ascii=TrueNastavit Code39Options(full_ascii=True)
UnsupportedFeatureErrorVolání funkce, která je definována, ale ještě není implementovánaZkontrolujte known_limitations v profilu symboliky
InvalidInputError na UPC-AData obsahují více než 12 číslicZadejte 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 / MetodaPopis:
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
BarcodeErrorZákladní výjimka pro knihovnu čárových kódů
InvalidInputErrorVyvolána při neplatných vstupních datech
EncodingErrorVyvolána při selhání kódování
RenderingErrorVyvoláno, když selže vykreslování
SymbologyNotFoundErrorVyvoláno pro neregistrované názvy symboliky
UnsupportedCapabilityErrorVyvoláno pro nedostupné schopnosti
UnsupportedFeatureErrorVyvoláno pro neimplementované funkce

Viz také:

 Čeština