Validasi Input dan Penanganan Kesalahan
Validasi Input dan Penanganan Kesalahan
Aspose.BarCode FOSS untuk Python memvalidasi semua data input sebelum proses encoding. Setiap simbologi memiliki subclass InputParser khusus yang memeriksa set karakter, batas panjang, dan aturan format. Ketika validasi gagal, pustaka mengeluarkan pengecualian bertipe dari hierarki BarcodeError sehingga pemanggil dapat membedakan antara masalah input, kegagalan encoding, dan masalah rendering.
Lapisan InputParser
Setiap simbologi mendaftarkan implementasi InputParser. Ketika Anda memanggil BarcodeService.generate(), parser dijalankan terlebih dahulu, menghasilkan NormalizedPayload atau menimbulkan InvalidInputError jika data tidak valid untuk simbologi tersebut.
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)Setiap parser simbologi memvalidasi aturan yang berbeda:
Code128InputParser— memeriksa bahwa semua karakter berada dalam rentang ASCII yang didukung oleh set karakter Code 128Code39InputParser— memvalidasi karakter terhadap alfabet dasar Code 39 atau alfabet ASCII penuh tergantung padaCode39Options.full_asciiEan13InputParser— memerlukan tepat 12 atau 13 digit numerik (digit ke-13 adalah digit cek)Ean8InputParser— memerlukan tepat 7 atau 8 digit numerikQrInputParser— memvalidasi data terhadapQrEncodeModeyang dipilih (NUMERIC, ALPHANUMERIC, BYTE, atau KANJI)UpcaInputParser— memerlukan tepat 11 atau 12 digit numerikUpceInputParser— memerlukan tepat 6, 7, atau 8 digit numerik dengan pola UPC-E yang valid
Hierarki BarcodeError
Semua pengecualian mewarisi dari BarcodeError, yang memperluas Exception bawaan Python. Hierarki memungkinkan blok catch pada tingkat spesifikasi yang berbeda:
| Exception | Dilempar Ketika |
|---|---|
BarcodeError | Kelas dasar untuk semua pengecualian library |
InvalidInputError | Data masukan gagal validasi (karakter salah, panjang salah) |
EncodingError | Logika enkoding gagal setelah validasi berhasil |
RenderingError | Renderer mengalami kesalahan saat output SVG atau PNG |
SymbologyNotFoundError | Nama simbologi tidak terdaftar di SymbologyRegistry |
UnsupportedCapabilityError | Kemampuan yang diminta tidak tersedia untuk simbologi |
UnsupportedFeatureError | Fitur didefinisikan tetapi belum diimplementasikan |
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}")Memvalidasi Nama Simbologi
SymbologyNotFoundError dilempar ketika BarcodeService.generate() menerima nama simbologi yang tidak terdaftar. SymbologyRegistry menyelesaikan nama berdasarkan nama kanonik atau alias, sehingga "code128", "Code128", dan "CODE128" semuanya menyelesaikan ke definisi yang sama.
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}")Validasi Digit Pemeriksa
EAN-13, EAN-8, UPC-A, dan UPC-E simbologi menghitung digit pemeriksa secara otomatis. Jika Anda memberikan data lengkap termasuk digit pemeriksa, parser memverifikasinya terhadap nilai yang dihitung. Properti allow_check_digit_input pada Ean13Options dan Ean8Options mengontrol perilaku ini.
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),
)Tips dan Praktik Terbaik
- Tangkap
InvalidInputErroruntuk formulir input yang dihadapi pengguna di mana data mungkin tidak memenuhi persyaratan simbologi - Gunakan
BarcodeErrorsebagai penangkap umum hanya ketika Anda tidak perlu membedakan antara jenis kesalahan - Periksa nama simbologi terhadap tujuh simbologi yang didukung (code128, code39, ean13, ean8, qrcode, upca, upce) sebelum memanggil
generate()untuk menghindariSymbologyNotFoundError - Untuk kode QR, atur
encoding_modesecara eksplisit melaluiQrOptionsketika data berisi karakter non-ASCII - Biarkan perpustakaan menghitung digit cek alih-alih menyediakannya secara manual — ini menghindari ketidakcocokan
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
InvalidInputError pada EAN-13 | Data memiliki kurang dari 12 digit atau berisi karakter non-numerik | Berikan tepat 12 atau 13 digit numerik |
SymbologyNotFoundError | Kesalahan ketik pada nama simbol (misalnya "code_128" alih-alih "code128") | Gunakan nama kanonik tanpa garis bawah |
EncodingError on Code 39 | Data mengandung huruf kecil tanpa full_ascii=True | Atur Code39Options(full_ascii=True) |
UnsupportedFeatureError | Memanggil fitur yang sudah didefinisikan namun belum diimplementasikan | Periksa known_limitations pada profil simbol |
InvalidInputError pada UPC-A | Data memiliki lebih dari 12 digit | Berikan tepat 11 atau 12 digit numerik |
FAQ
Bagaimana saya memeriksa apakah nama symbology valid sebelum menghasilkan?
Gunakan BarcodeService.registry untuk mengakses SymbologyRegistry. Panggil get_definition() dan tangkap SymbologyNotFoundError jika nama tidak terdaftar.
Bisakah saya menonaktifkan validasi digit cek untuk kode batang EAN?
Parser selalu memvalidasi digit cek ketika Anda menyediakan input dengan panjang penuh (13 digit untuk EAN-13, 8 untuk EAN-8). Untuk menghindari validasi, sediakan hanya digit data (12 untuk EAN-13, 7 untuk EAN-8) dan biarkan perpustakaan menghitung digit cek.
Apa yang terjadi jika saya mengirim data biner ke symbology kode batang 1D?
InvalidInputError dilempar. Code 128, Code 39, EAN, dan UPC symbologies hanya menerima data teks. Untuk data biner, gunakan QR Code dengan QrEncodeMode.BYTE.
Apakah pustaka memvalidasi panjang data untuk kode QR?
QrInputParser memvalidasi bahwa data sesuai dengan kapasitas versi QR yang diminta. Jika tidak ada versi yang ditentukan, pustaka memilih versi terkecil yang dapat menampung data tersebut.
Ringkasan API Reference
| Kelas / Metode | Deskripsi |
|---|---|
InputParser.parse(data, options) | Metode abstrak — memvalidasi dan menormalkan input menjadi NormalizedPayload |
Code128InputParser.parse(data, options) | Memvalidasi karakter input Code 128 |
Code39InputParser.parse(data, options) | Memvalidasi input Code 39 base atau full-ASCII |
Ean13InputParser.parse(data, options) | Memvalidasi jumlah digit EAN-13 dan digit cek |
Ean8InputParser.parse(data, options) | Memvalidasi jumlah digit EAN-8 dan digit cek |
QrInputParser.parse(data, options) | Memvalidasi data QR terhadap mode enkode yang dipilih |
UpcaInputParser.parse(data, options) | Memvalidasi jumlah digit UPC-A |
UpceInputParser.parse(data, options) | Memvalidasi jumlah digit UPC-E dan pola |
BarcodeError | Pengecualian dasar untuk pustaka barcode |
InvalidInputError | Dilempar untuk data input yang tidak valid |
EncodingError | Dilempar ketika enkoding gagal |
RenderingError | Dibangkitkan ketika rendering gagal |
SymbologyNotFoundError | Dibangkitkan untuk nama simbolologi yang tidak terdaftar |
UnsupportedCapabilityError | Dilempar untuk kapabilitas yang tidak tersedia |
UnsupportedFeatureError | Dilempar untuk fitur yang belum diimplementasikan |