Eingabevalidierung und Fehlerbehandlung

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 liegen
  • Code39InputParser — validiert Zeichen gegenüber dem Code 39 Basis- oder Voll-ASCII-Alphabet, abhängig von Code39Options.full_ascii
  • Ean13InputParser — erfordert genau 12 oder 13 numerische Ziffern (die 13. ist die Prüfziffer)
  • Ean8InputParser — erfordert genau 7 oder 8 numerische Ziffern
  • QrInputParser — prüft Daten gegen das ausgewählte QrEncodeMode (NUMERIC, ALPHANUMERIC, BYTE oder KANJI)
  • UpcaInputParser — erfordert genau 11 oder 12 numerische Ziffern
  • UpceInputParser — 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:

ExceptionAusgelöst, wenn
BarcodeErrorBasisklasse für alle Bibliotheksausnahmen
InvalidInputErrorEingabedaten bestehen die Validierung nicht (falsche Zeichen, falsche Länge)
EncodingErrorEncoding-Logik schlägt fehl, nachdem die Validierung bestanden wurde
RenderingErrorRenderer stößt während der SVG- oder PNG-Ausgabe auf einen Fehler
SymbologyNotFoundErrorDer Symbolname ist in SymbologyRegistry nicht registriert
UnsupportedCapabilityErrorEine angeforderte Fähigkeit ist für die Symbolik nicht verfügbar
UnsupportedFeatureErrorEin 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 InvalidInputError bei benutzerorientierten Eingabeformularen ab, bei denen die Daten möglicherweise nicht den Symbolanforderungen entsprechen.
  • Verwende BarcodeError als 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, um SymbologyNotFoundError zu vermeiden.
  • Für QR-Codes setze encoding_mode explizit über QrOptions, wenn die Daten nicht-ASCII-Zeichen enthalten.
  • Lassen Sie die Bibliothek Prüfziffern berechnen, anstatt sie manuell anzugeben — das verhindert Unstimmigkeiten

Häufige Probleme

ProblemUrsacheBeheben
InvalidInputError auf EAN-13Daten haben weniger als 12 Ziffern oder enthalten nicht-numerische ZeichenGeben Sie genau 12 oder 13 numerische Ziffern an
SymbologyNotFoundErrorTippfehler im Symbolnamen (z.B. "code_128" anstelle von "code128")Verwenden Sie den kanonischen Namen ohne Unterstriche
EncodingError auf Code 39Daten enthalten Kleinbuchstaben ohne full_ascii=TrueSetze Code39Options(full_ascii=True)
UnsupportedFeatureErrorAufruf eines Features, das definiert, aber noch nicht implementiert istPrüfen Sie known_limitations im Symbolprofil
InvalidInputError auf UPC-ADaten haben mehr als 12 ZiffernLiefern 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 / MethodeBeschreibung
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
BarcodeErrorBasisausnahme für die Barcode-Bibliothek
InvalidInputErrorWird bei ungültigen Eingabedaten ausgelöst
EncodingErrorWird ausgelöst, wenn die Kodierung fehlschlägt
RenderingErrorWird ausgelöst, wenn das Rendern fehlschlägt
SymbologyNotFoundErrorAusgelöst bei nicht registrierten Symbolnamen
UnsupportedCapabilityErrorAusgelöst bei nicht verfügbaren Fähigkeiten
UnsupportedFeatureErrorAusgelöst bei nicht implementierten Merkmalen

Siehe auch

 Deutsch