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 128Code39InputParser— validează caracterele în raport cu alfabetul de bază Code 39 sau complet ASCII, în funcție deCode39Options.full_asciiEan13InputParser— necesită exact 12 sau 13 cifre numerice (a 13-a este cifra de control)Ean8InputParser— necesită exact 7 sau 8 cifre numericeQrInputParser— validează datele în raport cuQrEncodeModeselectat (NUMERIC, ALPHANUMERIC, BYTE sau KANJI)UpcaInputParser— necesită exact 11 sau 12 cifre numericeUpceInputParser— 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:
| Exception | Ridicată când |
|---|---|
BarcodeError | Clasa de bază pentru toate excepțiile bibliotecii |
InvalidInputError | Datele de intrare nu trec validarea (caractere incorecte, lungime incorectă) |
EncodingError | Logica de codare eșuează după ce validarea trece |
RenderingError | Renderer întâmpină o eroare în timpul ieșirii SVG sau PNG |
SymbologyNotFoundError | Numele simbolisticii nu este înregistrat în SymbologyRegistry |
UnsupportedCapabilityError | O capacitate solicitată nu este disponibilă pentru simbolistică |
UnsupportedFeatureError | O 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
InvalidInputErrorpentru formularele de intrare destinate utilizatorilor, unde datele s-ar putea să nu respecte cerințele de simbolistică - Folosește
BarcodeErrorca 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 evitaSymbologyNotFoundError - Pentru codurile QR, setează
encoding_modeexplicit prinQrOptionscâ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-13 | Datele au mai puțin de 12 cifre sau conțin caractere non-numerice | Furnizați exact 12 sau 13 cifre numerice |
SymbologyNotFoundError | Greș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 39 | Datele conțin litere minuscule fără full_ascii=True | Setează Code39Options(full_ascii=True) |
UnsupportedFeatureError | Apelarea unei funcționalități care este definită, dar nu a fost încă implementată | Verificați known_limitations pe profilul de simbolistică |
InvalidInputError pe UPC-A | Datele au mai mult de 12 cifre | Furnizaț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 |
BarcodeError | Excepție de bază pentru biblioteca de coduri de bare |
InvalidInputError | Aruncată pentru date de intrare invalide |
EncodingError | Aruncată când codificarea eșuează |
RenderingError | Aruncată când randarea eșuează |
SymbologyNotFoundError | Ridicat pentru nume de simbolistică neînregistrate |
UnsupportedCapabilityError | Ridicat pentru capabilități indisponibile |
UnsupportedFeatureError | Ridicat pentru funcționalități neimplementate |