Επικύρωση Εισόδου και Διαχείριση Σφαλμάτων
Επικύρωση Εισόδου και Διαχείριση Σφαλμάτων
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 128Code39InputParser— επικυρώνει τους χαρακτήρες σε σχέση με την βάση Code 39 ή το πλήρες αλφάβητο ASCII ανάλογα με τοCode39Options.full_asciiEan13InputParser— απαιτεί ακριβώς 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 | Εγείρεται για μη υλοποιημένα χαρακτηριστικά |