Validarea intrărilor și gestionarea erorilor

Validarea intrărilor și gestionarea erorilor

Validarea intrărilor și gestionarea erorilor

Aspose.BarCode FOSS pentru Python validează toate datele de intrare înainte de codificare. Fiecare simbolistică are o subclasă InputParser dedicată care verifică seturile de caractere, constrângerile de lungime și regulile de format. Când validarea eșuează, biblioteca ridică excepții tipizate din ierarhia BarcodeError astfel încât apelanții să poată diferenția între problemele de intrare, eșecurile de codificare și problemele de randare.


Stratul InputParser

Fiecare simbolistică înregistrează o implementare InputParser. Când apelezi BarcodeService.generate(), parserul rulează mai întâi, producând un NormalizedPayload sau ridicând InvalidInputError dacă datele nu sunt valide pentru acea simbolistică.

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)

Fiecare parser de simbolistică validează reguli diferite:

  • Code128InputParser — verifică că toate caracterele se află în intervalul ASCII susținut de seturile de caractere Code 128
  • Code39InputParser — validează caracterele în raport cu alfabetul de bază Code 39 sau complet ASCII, în funcție de Code39Options.full_ascii
  • Ean13InputParser — necesită exact 12 sau 13 cifre numerice (a 13-a este cifra de control)
  • Ean8InputParser — necesită exact 7 sau 8 cifre numerice
  • QrInputParser — validează datele în raport cu QrEncodeMode selectat (NUMERIC, ALPHANUMERIC, BYTE sau KANJI)
  • UpcaInputParser — necesită exact 11 sau 12 cifre numerice
  • UpceInputParser — necesită exact 6, 7 sau 8 cifre numerice cu un model UPC-E valid

Ierarhia BarcodeError

Toate excepțiile moștenesc de la BarcodeError, care extinde Exception încorporat al lui Python. Ierarhia permite blocuri catch la diferite niveluri de specificitate:

ExceptionRidicată când
BarcodeErrorClasa de bază pentru toate excepțiile bibliotecii
InvalidInputErrorDatele de intrare nu trec validarea (caractere incorecte, lungime incorectă)
EncodingErrorLogica de codare eșuează după ce validarea trece
RenderingErrorRenderer întâmpină o eroare în timpul ieșirii SVG sau PNG
SymbologyNotFoundErrorNumele simbolisticii nu este înregistrat în SymbologyRegistry
UnsupportedCapabilityErrorO capacitate solicitată nu este disponibilă pentru simbolistică
UnsupportedFeatureErrorO caracteristică este definită, dar nu este implementată
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}")

Validarea denumirilor de simbolistică

SymbologyNotFoundError este aruncată când BarcodeService.generate() primește un nume de simbolistică care nu este înregistrat. SymbologyRegistry rezolvă numele după numele canonic sau alias, astfel că "code128", "Code128" și "CODE128" se rezolvă toate la aceeași definiție.

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

Validarea cifrei de control

Simbolisticile EAN-13, EAN-8, UPC-A și UPC-E calculează automat cifrele de control. Dacă furnizați datele complete, inclusiv o cifră de control, parserul le verifică față de valoarea calculată. Proprietatea allow_check_digit_input pe Ean13Options și Ean8Options controlează acest comportament.

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

Sfaturi și bune practici

  • Prinde InvalidInputError pentru formularele de intrare destinate utilizatorilor, unde datele s-ar putea să nu respecte cerințele de simbolistică
  • Folosește BarcodeError ca o captură generală numai când nu este nevoie să distingi între tipurile de erori
  • Verifică numele de simbolistică față de cele șapte simbolistici suportate (code128, code39, ean13, ean8, qrcode, upca, upce) înainte de a apela generate() pentru a evita SymbologyNotFoundError
  • Pentru codurile QR, setează encoding_mode explicit prin QrOptions când datele conțin caractere non-ASCII
  • Permite bibliotecii să calculeze cifrele de control în loc să le furnizezi manual — acest lucru evită neconcordanțele

Probleme comune

ProblemăCauzăRemediere
InvalidInputError pe EAN-13Datele au mai puțin de 12 cifre sau conțin caractere non-numericeFurnizați exact 12 sau 13 cifre numerice
SymbologyNotFoundErrorGreșeală de tipar în numele simbolisticii (de ex. "code_128" în loc de "code128")Folosiți numele canonic fără liniuțe de subliniere
EncodingError pe Code 39Datele conțin litere minuscule fără full_ascii=TrueSetează Code39Options(full_ascii=True)
UnsupportedFeatureErrorApelarea unei funcționalități care este definită, dar nu a fost încă implementatăVerificați known_limitations pe profilul de simbolistică
InvalidInputError pe UPC-ADatele au mai mult de 12 cifreFurnizați exact 11 sau 12 cifre numerice

FAQ

Cum pot verifica dacă un nume de simbolistică este valid înainte de a genera?

Folosește BarcodeService.registry pentru a accesa SymbologyRegistry. Apelează get_definition() și capturează SymbologyNotFoundError dacă numele nu este înregistrat.

Pot dezactiva validarea cifrei de control pentru codurile de bare EAN?

Parserul validează întotdeauna cifrele de control când furnizezi intrarea de lungime completă (13 cifre pentru EAN-13, 8 pentru EAN-8). Pentru a evita validarea, furnizează doar cifrele de date (12 pentru EAN-13, 7 pentru EAN-8) și lasă biblioteca să calculeze cifra de control.

Ce se întâmplă dacă transmit date binare unei simbolistici de cod de bare 1D?

InvalidInputError este ridicată. Code 128, Code 39, EAN și UPC acceptă doar date text. Pentru date binare, folosiți QR Code cu QrEncodeMode.BYTE.

Bibliotecă validează lungimea datelor pentru codurile QR?

QrInputParser validează că datele se încadrează în capacitatea versiunii QR solicitate. Dacă nu este specificată nicio versiune, biblioteca selectează cea mai mică versiune care poate găzdui datele.


API Reference Rezumat

Clasă / MetodăDescriere:
InputParser.parse(data, options)Metodă abstractă — validează și normalizează intrarea în NormalizedPayload
Code128InputParser.parse(data, options)Validează caracterele de intrare Code 128
Code39InputParser.parse(data, options)Validează intrarea Code 39 de bază sau full-ASCII
Ean13InputParser.parse(data, options)Validează numărul de cifre EAN-13 și cifra de control
Ean8InputParser.parse(data, options)Validează numărul de cifre EAN-8 și cifra de control
QrInputParser.parse(data, options)Validează datele QR în raport cu modul de codare selectat
UpcaInputParser.parse(data, options)Validează numărul de cifre UPC-A
UpceInputParser.parse(data, options)Validează numărul de cifre și modelul UPC-E
BarcodeErrorExcepție de bază pentru biblioteca de coduri de bare
InvalidInputErrorAruncată pentru date de intrare invalide
EncodingErrorAruncată când codificarea eșuează
RenderingErrorAruncată când randarea eșuează
SymbologyNotFoundErrorRidicat pentru nume de simbolistică neînregistrate
UnsupportedCapabilityErrorRidicat pentru capabilități indisponibile
UnsupportedFeatureErrorRidicat pentru funcționalități neimplementate

Vezi și:

 Română