Validazione dell'Input e Gestione degli Errori
Validazione dell’Input e Gestione degli Errori
Aspose.BarCode FOSS for Python valida tutti i dati di input prima della codifica. Ogni simbologia ha una sottoclasse InputParser dedicata che controlla i set di caratteri, i vincoli di lunghezza e le regole di formato. Quando la convalida fallisce, la libreria solleva eccezioni tipizzate dalla gerarchia BarcodeError così i chiamanti possono distinguere tra problemi di input, errori di codifica e problemi di rendering.
Il Livello InputParser
Ogni simbologia registra un’implementazione InputParser. Quando chiami BarcodeService.generate(), il parser viene eseguito per primo, producendo un NormalizedPayload o sollevando InvalidInputError se i dati non sono validi per quella simbologia.
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)Ogni parser di simbologia valida regole diverse:
Code128InputParser— verifica che tutti i caratteri siano nell’intervallo ASCII supportato dai set di caratteri Code 128Code39InputParser— valida i caratteri rispetto all’alfabeto base Code 39 o all’alfabeto ASCII completo a seconda diCode39Options.full_asciiEan13InputParser— richiede esattamente 12 o 13 cifre numeriche (la 13ª è la cifra di controllo)Ean8InputParser— richiede esattamente 7 o 8 cifre numericheQrInputParser— convalida i dati rispetto alQrEncodeModeselezionato (NUMERIC, ALPHANUMERIC, BYTE o KANJI)UpcaInputParser— richiede esattamente 11 o 12 cifre numericheUpceInputParser— richiede esattamente 6, 7 o 8 cifre numeriche con un modello UPC-E valido
La gerarchia BarcodeError
Tutte le eccezioni ereditano da BarcodeError, che estende il Exception integrato di Python. La gerarchia consente blocchi catch a diversi livelli di specificità:
| Exception | Generato quando |
|---|---|
BarcodeError | Classe base per tutte le eccezioni della libreria |
InvalidInputError | I dati di input non superano la validazione (caratteri errati, lunghezza errata) |
EncodingError | La logica di codifica fallisce dopo che la validazione è superata |
RenderingError | Renderer riscontra un errore durante l’output SVG o PNG |
SymbologyNotFoundError | Il nome della simbologia non è registrato in SymbologyRegistry |
UnsupportedCapabilityError | Una capacità richiesta non è disponibile per la simbologia |
UnsupportedFeatureError | Una funzionalità è definita ma non implementata |
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}")Validazione dei nomi di simbologia
SymbologyNotFoundError viene sollevato quando BarcodeService.generate() riceve un nome di simbologia che non è registrato. Il SymbologyRegistry risolve i nomi per nome canonico o alias, quindi "code128", "Code128" e "CODE128" si risolvono tutti nella stessa definizione.
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}")Validazione della cifra di controllo
EAN-13, EAN-8, UPC-A e UPC-E le simbologie calcolano automaticamente le cifre di controllo. Se fornisci i dati completi includendo una cifra di controllo, il parser la verifica rispetto al valore calcolato. La proprietà allow_check_digit_input su Ean13Options e Ean8Options controlla questo comportamento.
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),
)Suggerimenti e migliori pratiche
- Gestisci
InvalidInputErrorper i moduli di input rivolti agli utenti dove i dati potrebbero non soddisfare i requisiti della simbologia - Utilizza
BarcodeErrorcome cattura generale solo quando non è necessario distinguere tra i tipi di errore - Verifica il nome della simbologia rispetto alle sette simbologie supportate (code128, code39, ean13, ean8, qrcode, upca, upce) prima di chiamare
generate()per evitareSymbologyNotFoundError - Per i codici QR, imposta
encoding_modeesplicitamente tramiteQrOptionsquando i dati contengono caratteri non ASCII - Lascia che la libreria calcoli le cifre di controllo anziché fornirle manualmente — questo evita incongruenze
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
InvalidInputError su EAN-13 | I dati hanno meno di 12 cifre o contengono caratteri non numerici | Fornire esattamente 12 o 13 cifre numeriche |
SymbologyNotFoundError | Errore di battitura nel nome della simbologia (ad esempio "code_128" invece di "code128") | Usa il nome canonico senza trattini bassi |
EncodingError su Code 39 | I dati contengono lettere minuscole senza full_ascii=True | Imposta Code39Options(full_ascii=True) |
UnsupportedFeatureError | Invocare una funzionalità definita ma non ancora implementata | Controlla known_limitations sul profilo di simbologia |
InvalidInputError su UPC-A | I dati hanno più di 12 cifre | Fornisci esattamente 11 o 12 cifre numeriche |
FAQ
Come posso verificare se un nome di simbologia è valido prima di generare?
Usa BarcodeService.registry per accedere al SymbologyRegistry. Chiama get_definition() e intercetta SymbologyNotFoundError se il nome non è registrato.
Posso disabilitare la convalida della cifra di controllo per i codici a barre EAN?
Il parser convalida sempre le cifre di controllo quando fornisci l’input a lunghezza completa (13 cifre per EAN-13, 8 per EAN-8). Per evitare la convalida, fornisci solo le cifre dati (12 per EAN-13, 7 per EAN-8) e lascia che la libreria calcoli la cifra di controllo.
Cosa succede se passo dati binari a una simbologia di codice a barre 1D?
InvalidInputError viene sollevato. Le simbologie Code 128, Code 39, EAN e UPC accettano solo dati di testo. Per dati binari, usare QR Code con QrEncodeMode.BYTE.
La libreria valida la lunghezza dei dati per i codici QR?
QrInputParser verifica che i dati rientrino nella capacità della versione QR richiesta. Se non è specificata alcuna versione, la libreria seleziona la versione più piccola che può contenere i dati.
API Reference Riepilogo
| Classe / Metodo | Descrizione |
|---|---|
InputParser.parse(data, options) | Metodo astratto — valida e normalizza l’input in NormalizedPayload |
Code128InputParser.parse(data, options) | Valida i caratteri di input Code 128 |
Code39InputParser.parse(data, options) | Valida l’input Code 39 base o full-ASCII |
Ean13InputParser.parse(data, options) | Convalida il conteggio delle cifre di EAN-13 e la cifra di controllo |
Ean8InputParser.parse(data, options) | Convalida il conteggio delle cifre di EAN-8 e la cifra di controllo |
QrInputParser.parse(data, options) | Convalida i dati QR rispetto alla modalità di codifica selezionata |
UpcaInputParser.parse(data, options) | Convalida il conteggio delle cifre di UPC-A |
UpceInputParser.parse(data, options) | Convalida il conteggio delle cifre e il modello di UPC-E |
BarcodeError | Eccezione di base per la libreria barcode |
InvalidInputError | Sollevata per dati di input non validi |
EncodingError | Sollevata quando la codifica fallisce |
RenderingError | Sollevata quando il rendering fallisce |
SymbologyNotFoundError | Sollevato per nomi di simbologia non registrati |
UnsupportedCapabilityError | Sollevato per capacità non disponibili |
UnsupportedFeatureError | Sollevato per funzionalità non implementate |