Επικύρωση Εισόδου και Διαχείριση Σφαλμάτων

Επικύρωση Εισόδου και Διαχείριση Σφαλμάτων

Επικύρωση Εισόδου και Διαχείριση Σφαλμάτων

Aspose.BarCode FOSS for Python επικυρώνει όλα τα δεδομένα εισόδου πριν από την κωδικοποίηση. Κάθε συμβολική γλώσσα έχει μια αφιερωμένη υποκατηγορία InputParser που ελέγχει τα σύνολα χαρακτήρων, τους περιορισμούς μήκους και τους κανόνες μορφής. Όταν η επικύρωση αποτυγχάνει, η βιβλιοθήκη εγείρει τύπου εξαιρέσεις από την ιεραρχία BarcodeError ώστε οι καλούντες να μπορούν να διακρίνουν μεταξύ προβλημάτων εισόδου, αποτυχιών κωδικοποίησης και ζητημάτων απόδοσης.


Η Στρώση InputParser

Κάθε συμβολική γλώσσα καταχωρίζει μια υλοποίηση InputParser. Όταν καλέσετε το BarcodeService.generate(), ο αναλυτής εκτελείται πρώτα, παράγοντας ένα NormalizedPayload ή εγείροντας InvalidInputError εάν τα δεδομένα δεν είναι έγκυρα για εκείνη τη συμβολική γλώσσα.

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)

Κάθε αναλυτής συμβολικής γλώσσας επικυρώνει διαφορετικούς κανόνες:

  • Code128InputParser — ελέγχει ότι όλοι οι χαρακτήρες βρίσκονται στην περιοχή ASCII που υποστηρίζεται από τα σύνολα χαρακτήρων του Code 128
  • Code39InputParser — επικυρώνει τους χαρακτήρες σε σχέση με την βάση Code 39 ή το πλήρες αλφάβητο ASCII ανάλογα με το Code39Options.full_ascii
  • Ean13InputParser — απαιτεί ακριβώς 12 ή 13 αριθμητικά ψηφία (το 13ο είναι το ψηφίο ελέγχου)
  • Ean8InputParser — απαιτεί ακριβώς 7 ή 8 αριθμητικά ψηφία
  • QrInputParser — επαληθεύει τα δεδομένα έναντι του επιλεγμένου QrEncodeMode (NUMERIC, ALPHANUMERIC, BYTE ή KANJI)
  • UpcaInputParser — απαιτεί ακριβώς 11 ή 12 αριθμητικά ψηφία
  • UpceInputParser — απαιτεί ακριβώς 6, 7 ή 8 αριθμητικά ψηφία με ένα έγκυρο πρότυπο UPC-E

Η ιεραρχία BarcodeError

Όλες οι εξαιρέσεις κληρονομούν από το BarcodeError, το οποίο επεκτείνει το ενσωματωμένο Exception του Python. Η ιεραρχία επιτρέπει τα μπλοκ catch σε διαφορετικά επίπεδα εξειδίκευσης:

ExceptionΕγείρεται όταν
BarcodeErrorΒασική κλάση για όλες τις εξαιρέσεις της βιβλιοθήκης
InvalidInputErrorΤα δεδομένα εισόδου αποτυγχάνουν την επικύρωση (λανθασμένοι χαρακτήρες, λανθασμένο μήκος)
EncodingErrorΗ λογική κωδικοποίησης αποτυγχάνει μετά την επιτυχή επικύρωση
RenderingErrorΟ Renderer αντιμετωπίζει σφάλμα κατά την παραγωγή SVG ή PNG
SymbologyNotFoundErrorΤο όνομα συμβολισμού δεν είναι καταχωρημένο στο SymbologyRegistry
UnsupportedCapabilityErrorΗ ζητούμενη δυνατότητα δεν είναι διαθέσιμη για το σύστημα συμβολισμού
UnsupportedFeatureErrorΜια λειτουργία έχει οριστεί αλλά δεν έχει υλοποιηθεί
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}")

Επικύρωση Ονομάτων Συμβολισμού

SymbologyNotFoundError εμφανίζεται όταν το BarcodeService.generate() λαμβάνει ένα όνομα συμβολισμού που δεν είναι καταχωρημένο. Το SymbologyRegistry επιλύει ονόματα με το κανονικό όνομα ή το ψευδώνυμο, έτσι τα "code128", "Code128" και "CODE128" επιλύονται όλα στην ίδια ορισμό.

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

Επικύρωση Ψηφίου Ελέγχου

Οι συμβολισμοί EAN-13, EAN-8, UPC-A και UPC-E υπολογίζουν αυτόματα τα ψηφία ελέγχου. Εάν περάσετε τα πλήρη δεδομένα συμπεριλαμβανομένου ενός ψηφίου ελέγχου, ο αναλυτής το επαληθεύει σε σχέση με την υπολογισμένη τιμή. Η ιδιότητα allow_check_digit_input στο Ean13Options και το Ean8Options ελέγχει αυτή τη συμπεριφορά.

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

Συμβουλές και Καλές Πρακτικές

  • Αντιμετωπίστε το InvalidInputError σε φόρμες εισόδου που προορίζονται για χρήστες, όπου τα δεδομένα ενδέχεται να μην ικανοποιούν τις απαιτήσεις του συμβολισμού.
  • Χρησιμοποιήστε το BarcodeError ως γενικό χειριστή σφαλμάτων μόνο όταν δεν χρειάζεται να διακρίνετε μεταξύ τύπων σφαλμάτων.
  • Ελέγξτε το όνομα συμβολισμού έναντι των επτά υποστηριζόμενων συμβολισμών (code128, code39, ean13, ean8, qrcode, upca, upce) πριν καλέσετε το generate() για να αποφύγετε το SymbologyNotFoundError.
  • Για κωδικούς QR, ορίστε το encoding_mode ρητά μέσω του QrOptions όταν τα δεδομένα περιέχουν μη-ASCII χαρακτήρες.
  • Αφήστε τη βιβλιοθήκη να υπολογίζει τα ψηφία ελέγχου αντί να τα παρέχετε χειροκίνητα — αυτό αποφεύγει τις ασυμφωνίες

Συνηθισμένα Προβλήματα

ΖήτημαΑιτίαΔιόρθωση
InvalidInputError στο EAN-13Τα δεδομένα έχουν λιγότερα από 12 ψηφία ή περιέχουν μη αριθμητικούς χαρακτήρεςΠαρέχετε ακριβώς 12 ή 13 αριθμητικά ψηφία
SymbologyNotFoundErrorΛάθος στην ονομασία συμβολισμού (π.χ. "code_128" αντί για "code128")Χρησιμοποιήστε το κανονικό όνομα χωρίς κάτω παύλες
EncodingError στο Code 39Τα δεδομένα περιέχουν πεζά γράμματα χωρίς full_ascii=TrueΟρίστε Code39Options(full_ascii=True)
UnsupportedFeatureErrorΚλήση μιας λειτουργίας που είναι ορισμένη αλλά δεν έχει ακόμη υλοποιηθείΕλέγξτε το known_limitations στο προφίλ συμβολισμού
InvalidInputError στο UPC-AΤα δεδομένα έχουν περισσότερα από 12 ψηφίαΠαρέχετε ακριβώς 11 ή 12 αριθμητικά ψηφία

FAQ

Πώς μπορώ να ελέγξω αν ένα όνομα συμβολολογίας είναι έγκυρο πριν τη δημιουργία;

Χρησιμοποιήστε BarcodeService.registry για να αποκτήσετε πρόσβαση στο SymbologyRegistry. Καλέστε το get_definition() και πιάστε το SymbologyNotFoundError εάν το όνομα δεν είναι καταχωρημένο.

Μπορώ να απενεργοποιήσω την επικύρωση του ψηφίου ελέγχου για τους κωδικούς EAN;

Ο αναλυτής επικυρώνει πάντα τα ψηφία ελέγχου όταν παρέχετε την είσοδο πλήρους μήκους (13 ψηφία για EAN-13, 8 για EAN-8). Για να αποφύγετε την επικύρωση, παρέχετε μόνο τα ψηφία δεδομένων (12 για EAN-13, 7 για EAN-8) και αφήστε τη βιβλιοθήκη να υπολογίσει το ψηφίο ελέγχου.

Τι συμβαίνει αν περάσω δυαδικά δεδομένα σε μια 1D barcode συμβολολογία;

InvalidInputError εγείρεται. Code 128, Code 39, EAN και UPC συμβολισμοί δέχονται μόνο κείμενο. Για δυαδικά δεδομένα, χρησιμοποιήστε QR Code με QrEncodeMode.BYTE.

Επικυρώνει η βιβλιοθήκη το μήκος των δεδομένων για κωδικούς QR;

QrInputParser επαληθεύει ότι τα δεδομένα χωρούν μέσα στην χωρητικότητα της ζητούμενης έκδοσης QR. Εάν δεν έχει καθοριστεί έκδοση, η βιβλιοθήκη επιλέγει τη μικρότερη έκδοση που φιλοξενεί τα δεδομένα.


API Reference Περίληψη

Κλάση / ΜέθοδοςΠεριγραφή
InputParser.parse(data, options)Αφηρημένη μέθοδος — επικυρώνει και κανονικοποιεί την είσοδο σε NormalizedPayload
Code128InputParser.parse(data, options)Επικυρώνει χαρακτήρες εισόδου Code 128
Code39InputParser.parse(data, options)Επικυρώνει Code 39 βάση ή πλήρη ASCII είσοδο
Ean13InputParser.parse(data, options)Επικυρώνει τον αριθμό ψηφίων του EAN-13 και το ψηφίο ελέγχου
Ean8InputParser.parse(data, options)Επικυρώνει τον αριθμό ψηφίων του EAN-8 και το ψηφίο ελέγχου
QrInputParser.parse(data, options)Επικυρώνει τα δεδομένα QR σε σχέση με την επιλεγμένη λειτουργία κωδικοποίησης
UpcaInputParser.parse(data, options)Επικυρώνει τον αριθμό ψηφίων του UPC-A
UpceInputParser.parse(data, options)Επικυρώνει τον αριθμό ψηφίων και το πρότυπο του UPC-E
BarcodeErrorΒασική εξαίρεση για τη βιβλιοθήκη barcode
InvalidInputErrorΕγείρεται για μη έγκυρα δεδομένα εισόδου
EncodingErrorΕγείρεται όταν η κωδικοποίηση αποτυγχάνει
RenderingErrorΕγείρεται όταν η απόδοση αποτυγχάνει
SymbologyNotFoundErrorΕγείρεται για μη καταχωρημένα ονόματα συμβολισμού
UnsupportedCapabilityErrorΕγείρεται για μη διαθέσιμες δυνατότητες
UnsupportedFeatureErrorΕγείρεται για μη υλοποιημένα χαρακτηριστικά

Δείτε επίσης

 Ελληνικά