इनपुट मान्यकरण और त्रुटि प्रबंधन

इनपुट मान्यकरण और त्रुटि प्रबंधन

इनपुट सत्यापन और त्रुटि संभालना

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 विफल हो जाता है
RenderingErrorRenderer SVG या PNG आउटपुट के दौरान त्रुटि का सामना करता है
SymbologyNotFoundErrorsymbology नाम 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असंपादित विशेषताओं के लिए उठाया गया

यह भी देखें

 हिन्दी