इनपुट मान्यकरण और त्रुटि प्रबंधन
इनपुट सत्यापन और त्रुटि संभालना
Aspose.BarCode FOSS for Python एन्कोडिंग से पहले सभी इनपुट डेटा की वैधता जांचता है। प्रत्येक सिम्बोलॉजी का एक समर्पित InputParser उपवर्ग होता है जो कैरेक्टर सेट, लंबाई प्रतिबंध और फ़ॉर्मेट नियमों की जाँच करता है। जब वैधता विफल होती है, तो लाइब्रेरी BarcodeError पदानुक्रम से टाइप्ड एक्सेप्शन उठाती है ताकि कॉलर इनपुट समस्याओं, एन्कोडिंग विफलताओं और रेंडरिंग मुद्दों के बीच अंतर कर सकें।
The 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— यह जाँचता है कि सभी अक्षर Code 128 कैरेक्टर सेट द्वारा समर्थित ASCII रेंज में हैंCode39InputParser—Code39Options.full_asciiके आधार पर Code 39 बेस या पूर्ण-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 से विरासत में लेते हैं, जो Python के अंतर्निर्मित Exception को विस्तारित करता है। पदानुक्रम विभिन्न विशिष्टता स्तरों पर catch ब्लॉकों की अनुमति देता है:
| Exception | उठाया जाता है जब |
|---|---|
BarcodeError | सभी लाइब्रेरी अपवादों के लिए Base class |
InvalidInputError | इनपुट डेटा वैधता में असफल होता है (गलत अक्षर, गलत लंबाई) |
EncodingError | वैधता पास होने के बाद Encoding logic विफल हो जाता है |
RenderingError | Renderer SVG या PNG आउटपुट के दौरान त्रुटि का सामना करता है |
SymbologyNotFoundError | symbology नाम SymbologyRegistry में पंजीकृत नहीं है |
UnsupportedCapabilityError | अनुरोधित क्षमता symbology के लिए उपलब्ध नहीं है |
UnsupportedFeatureError | एक feature परिभाषित है लेकिन लागू नहीं किया गया है |
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() को एक symbology नाम मिलता है जो पंजीकृत नहीं है। SymbologyRegistry नामों को canonical name या alias से हल करता है, इसलिए "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 symbologies स्वचालित रूप से चेक डिजिट की गणना करती हैं। यदि आप चेक डिजिट सहित पूर्ण डेटा पास करते हैं, तो पार्सर इसे गणना किए गए मान के विरुद्ध सत्यापित करता है। 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को पकड़ें जहाँ डेटा symbology आवश्यकताओं को पूरा नहीं कर सकता। - केवल तभी
BarcodeErrorको एक सर्वत्र पकड़ के रूप में उपयोग करें जब आपको त्रुटि प्रकारों में अंतर करने की आवश्यकता न हो। generate()को कॉल करने से पहले symbology नाम को सात समर्थित symbologies (code128, code39, ean13, ean8, qrcode, upca, upce) के विरुद्ध जाँचें ताकिSymbologyNotFoundErrorसे बचा जा सके।- जब डेटा में non-ASCII अक्षर हों, तो QR कोड्स के लिए
encoding_modeको स्पष्ट रूप सेQrOptionsके माध्यम से सेट करें। - लाइब्रेरी को चेक अंक स्वयं गणना करने दें बजाय उन्हें मैन्युअल रूप से प्रदान करने के — इससे असंगतियों से बचा जा सकता है
सामान्य समस्याएँ
| समस्या | कारण | समाधान |
|---|---|---|
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 बारकोड के लिए चेक अंक सत्यापन को अक्षम कर सकता हूँ?
जब आप पूरी लंबाई का इनपुट प्रदान करते हैं ( EAN-13 के लिए 13 अंक, EAN-8 के लिए 8 अंक), तो पार्सर हमेशा चेक अंकों को वैधता जाँचता है। वैधता से बचने के लिए, केवल डेटा अंकों को प्रदान करें ( EAN-13 के लिए 12, EAN-8 के लिए 7) और लाइब्रेरी को चेक अंक गणना करने दें।
यदि मैं बाइनरी डेटा को 1D बारकोड सिंबोलॉजी में पास करता हूँ तो क्या होता है?
InvalidInputError उत्पन्न किया जाता है। Code 128, Code 39, EAN, और UPC प्रतीकात्मकता केवल टेक्स्ट डेटा स्वीकार करती हैं। बाइनरी डेटा के लिए, QrEncodeMode.BYTE के साथ QR Code का उपयोग करें।
क्या लाइब्रेरी 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 | असंपादित विशेषताओं के लिए उठाया गया |