אימות קלט וטיפול בשגיאות
אימות קלט וטיפול בשגיאות
Aspose.BarCode FOSS עבור 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 | הממעבד נתקל בשגיאה במהלך פלט 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) ותן לספרייה לחשב את ספרת הבדיקה.
מה קורה אם אני מעביר נתונים בינריים לסימבולוגיית ברקוד חד-ממדית?
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 | החריגה הבסיסית עבור ספריית הברקוד |
InvalidInputError | נזרק עבור נתוני קלט לא חוקיים |
EncodingError | נזרק כאשר הקידוד נכשל |
RenderingError | נזרק כאשר הרינדור נכשל |
SymbologyNotFoundError | נזרק עבור שמות סימבוליות שלא נרשמו |
UnsupportedCapabilityError | נזרק עבור יכולות שאינן זמינות |
UnsupportedFeatureError | נזרק עבור תכונות שלא מומשו |