入力検証とエラー処理

入力検証とエラー処理

入力検証とエラーハンドリング

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 範囲内にあることを確認します
  • Code39InputParserCode39Options.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 シンボロジーはチェックデジットを自動的に計算します。チェックデジットを含む完全なデータを渡すと、パーサーは計算された値と照合して検証します。Ean13OptionsEan8Optionsallow_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未実装の機能に対して発生

参照

 日本語