入力検証とエラー処理
入力検証とエラーハンドリング
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パターンが必要です
The BarcodeError ヒエラルキー
すべての例外は BarcodeError から継承され、Python の組み込み Exception を拡張しています。階層により、異なる具体度のキャッチブロックを使用できます:
| 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 シンボロジーはチェックデジットを自動的に計算します。チェックデジットを含む完全なデータを渡すと、パーサーは計算された値と照合して検証します。Ean13Options と Ean8Options の allow_check_digit_input プロパティがこの動作を制御します。
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をキャッチオールとして使用してください。 generate()を呼び出す前に、シンボロジー名がサポートされている7つのシンボロジー(code128、code39、ean13、ean8、qrcode、upca、upce)と一致するか確認し、SymbologyNotFoundErrorを回避してください。- QR コードの場合、データに非ASCII文字が含まれるときは、
QrOptionsを通じてencoding_modeを明示的に設定してください。 - チェックディジットは手動で提供するのではなく、ライブラリに計算させましょう — これにより不一致を防げます
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
InvalidInputError を EAN-13 に | データの桁数が12桁未満であるか、数字以外の文字が含まれています | 正確に12桁または13桁の数字を入力してください |
SymbologyNotFoundError | シンボロジー名のタイプミス(例: "code_128" の代わりに "code128") | アンダースコアなしの標準名を使用してください |
EncodingError の Code 39 | データには 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 | 未実装の機能に対して発生 |