Eingabevalidierung und Fehlerbehandlung
Eingabevalidierung und Fehlerbehandlung
Aspose.BarCode FOSS für Python validiert alle Eingabedaten vor der Kodierung. Jede Symbolik hat eine dedizierte InputParser Unterklasse, die Zeichensätze, Längenbeschränkungen und Formatregeln prüft. Wenn die Validierung fehlschlägt, wirft die Bibliothek typisierte Ausnahmen aus der BarcodeError Hierarchie, sodass Aufrufer zwischen Eingabeproblemen, Kodierungsfehlern und Rendering-Problemen unterscheiden können.
Die InputParser Ebene
Jede Symbolik registriert eine InputParser Implementierung. Wenn Sie BarcodeService.generate() aufrufen, wird zuerst der Parser ausgeführt, der ein NormalizedPayload erzeugt oder InvalidInputError auslöst, wenn die Daten für diese Symbolik nicht gültig sind.
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)Jeder Symbolik-Parser validiert unterschiedliche Regeln:
Code128InputParser— prüft, dass alle Zeichen im von Code 128 Zeichensätzen unterstützten ASCII-Bereich liegenCode39InputParser— validiert Zeichen gegenüber dem Code 39 Basis- oder Voll-ASCII-Alphabet, abhängig vonCode39Options.full_asciiEan13InputParser— erfordert genau 12 oder 13 numerische Ziffern (die 13. ist die Prüfziffer)Ean8InputParser— erfordert genau 7 oder 8 numerische ZiffernQrInputParser— prüft Daten gegen das ausgewählteQrEncodeMode(NUMERIC, ALPHANUMERIC, BYTE oder KANJI)UpcaInputParser— erfordert genau 11 oder 12 numerische ZiffernUpceInputParser— erfordert genau 6, 7 oder 8 numerische Ziffern mit einem gültigen UPC-E-Muster
Die BarcodeError-Hierarchie
Alle Ausnahmen erben von BarcodeError, das die integrierte Exception von Python erweitert. Die Hierarchie ermöglicht catch-Blöcke auf verschiedenen Spezifitätsstufen:
| Exception | Ausgelöst, wenn |
|---|---|
BarcodeError | Basisklasse für alle Bibliotheksausnahmen |
InvalidInputError | Eingabedaten bestehen die Validierung nicht (falsche Zeichen, falsche Länge) |
EncodingError | Encoding-Logik schlägt fehl, nachdem die Validierung bestanden wurde |
RenderingError | Renderer stößt während der SVG- oder PNG-Ausgabe auf einen Fehler |
SymbologyNotFoundError | Der Symbolname ist in SymbologyRegistry nicht registriert |
UnsupportedCapabilityError | Eine angeforderte Fähigkeit ist für die Symbolik nicht verfügbar |
UnsupportedFeatureError | Ein Feature ist definiert, aber nicht implementiert |
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}")Validierung von Symbology-Namen
SymbologyNotFoundError wird ausgelöst, wenn BarcodeService.generate() einen Symbolnamen erhält, der nicht registriert ist. Der SymbologyRegistry löst Namen anhand des kanonischen Namens oder eines Alias auf, sodass "code128", "Code128" und "CODE128" alle zur selben Definition führen.
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}")Prüfziffer-Validierung
EAN-13, EAN-8, UPC-A und UPC-E Symbolsysteme berechnen Prüfziffern automatisch. Wenn Sie die vollständigen Daten einschließlich einer Prüfziffer übergeben, prüft der Parser diese gegen den berechneten Wert. Die allow_check_digit_input-Eigenschaft von Ean13Options und Ean8Options steuert dieses Verhalten.
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),
)Tipps und bewährte Verfahren
- Fange
InvalidInputErrorbei benutzerorientierten Eingabeformularen ab, bei denen die Daten möglicherweise nicht den Symbolanforderungen entsprechen. - Verwende
BarcodeErrorals Catch-All nur, wenn du zwischen Fehlertypen nicht unterscheiden musst. - Überprüfe den Symbolnamen gegen die sieben unterstützten Symbolsysteme (code128, code39, ean13, ean8, qrcode, upca, upce), bevor du
generate()aufrufst, umSymbologyNotFoundErrorzu vermeiden. - Für QR-Codes setze
encoding_modeexplizit überQrOptions, wenn die Daten nicht-ASCII-Zeichen enthalten. - Lassen Sie die Bibliothek Prüfziffern berechnen, anstatt sie manuell anzugeben — das verhindert Unstimmigkeiten
Häufige Probleme
| Problem | Ursache | Beheben |
|---|---|---|
InvalidInputError auf EAN-13 | Daten haben weniger als 12 Ziffern oder enthalten nicht-numerische Zeichen | Geben Sie genau 12 oder 13 numerische Ziffern an |
SymbologyNotFoundError | Tippfehler im Symbolnamen (z.B. "code_128" anstelle von "code128") | Verwenden Sie den kanonischen Namen ohne Unterstriche |
EncodingError auf Code 39 | Daten enthalten Kleinbuchstaben ohne full_ascii=True | Setze Code39Options(full_ascii=True) |
UnsupportedFeatureError | Aufruf eines Features, das definiert, aber noch nicht implementiert ist | Prüfen Sie known_limitations im Symbolprofil |
InvalidInputError auf UPC-A | Daten haben mehr als 12 Ziffern | Liefern Sie genau 11 oder 12 numerische Ziffern |
FAQ
Wie überprüfe ich, ob ein Symbolname gültig ist, bevor ich ihn generiere?
Verwenden Sie BarcodeService.registry, um auf das SymbologyRegistry zuzugreifen. Rufen Sie get_definition() auf und fangen Sie SymbologyNotFoundError, falls der Name nicht registriert ist.
Kann ich die Prüfziffervalidierung für EAN-Barcodes deaktivieren?
Der Parser prüft die Prüfziffern stets, wenn Sie die Eingabe in voller Länge bereitstellen (13 Ziffern für EAN-13, 8 für EAN-8). Um die Validierung zu vermeiden, geben Sie nur die Datenziffern an (12 für EAN-13, 7 für EAN-8) und lassen Sie die Bibliothek die Prüfziffer berechnen.
Was passiert, wenn ich Binärdaten an eine 1D-Barcode-Symbologie übergebe?
InvalidInputError wird ausgelöst. Code 128, Code 39, EAN und UPC Symbologien akzeptieren nur Textdaten. Für Binärdaten verwenden Sie QR Code mit QrEncodeMode.BYTE.
Validiert die Bibliothek die Datenlänge für QR-Codes?
QrInputParser prüft, ob die Daten in die Kapazität der angeforderten QR-Version passen. Wenn keine Version angegeben ist, wählt die Bibliothek die kleinste Version aus, die die Daten aufnehmen kann.
API Reference Zusammenfassung
| Klasse / Methode | Beschreibung |
|---|---|
InputParser.parse(data, options) | Abstrakte Methode — validiert und normalisiert Eingaben in NormalizedPayload |
Code128InputParser.parse(data, options) | Validiert Code 128-Eingabezeichen |
Code39InputParser.parse(data, options) | Validiert Code 39-Base- oder Full-ASCII-Eingaben |
Ean13InputParser.parse(data, options) | Validiert die Ziffernanzahl von EAN-13 und die Prüfziffer |
Ean8InputParser.parse(data, options) | Validiert die Ziffernanzahl von EAN-8 und die Prüfziffer |
QrInputParser.parse(data, options) | Validiert QR-Daten gegen den ausgewählten Kodiermodus |
UpcaInputParser.parse(data, options) | Validiert die Ziffernanzahl von UPC-A |
UpceInputParser.parse(data, options) | Validiert die Ziffernanzahl und das Muster von UPC-E |
BarcodeError | Basisausnahme für die Barcode-Bibliothek |
InvalidInputError | Wird bei ungültigen Eingabedaten ausgelöst |
EncodingError | Wird ausgelöst, wenn die Kodierung fehlschlägt |
RenderingError | Wird ausgelöst, wenn das Rendern fehlschlägt |
SymbologyNotFoundError | Ausgelöst bei nicht registrierten Symbolnamen |
UnsupportedCapabilityError | Ausgelöst bei nicht verfügbaren Fähigkeiten |
UnsupportedFeatureError | Ausgelöst bei nicht implementierten Merkmalen |