Python で PSD Core 例外を処理する方法
Aspose.PSD FOSS for Python は 2 つの例外タイプを定義しています: PsdLoadException は PSD/PSB ドキュメントの解析中に発生し、PsdSaveException は書き込み中に発生します。両方とも組み込みの Exception から派生し、メッセージとオプションの内部例外を受け取ります。
ステップバイステップ ガイド
ステップ 1: パッケージをインストールする
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATHステップ 2: 必要なクラスをインポートする
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveExceptionステップ 3: ロード時の失敗をキャッチする
PsdLoadException は、ドキュメントの構造が検証に失敗したときに発生します — 例として、サポートされていない PSD/PSB バージョン、セクション長が囲んでいるセクションの宣言された境界を超えている場合、またはストリームデータが切り捨てられている場合です:
try:
image = PsdImage.load("input.psd")
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")ステップ 4: 保存時の失敗を捕捉する
PsdSaveException は、ドキュメントを書き込んでいる際に発生します — 例として、文字列値が PSD のパスカル文字列フィールドが保持できる長さ(255 バイト)を超える場合です:
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")ステップ 5: 内部例外を検査する
両方の例外タイプは inner_exception コンストラクタ引数を受け取ります(内部で使用されます。例として、I/O エラーがファイル構造の読み取りを中断したときなど)。根本的な原因については inner_exception を確認してください:
try:
image = PsdImage.load("input.psd")
except PsdLoadException as ex:
if ex.inner_exception is not None:
print(f"Underlying I/O error: {ex.inner_exception}")一般的な問題と修正
PsdLoadException サポートされていないバージョンに関するメッセージです。 ファイルの宣言された PSD バージョンフィールドは、標準の PSD でも大容量ドキュメント用の PSB でもありません。ファイルが真正で破損していない PSD/PSB ドキュメントであることを確認してください。
PsdLoadException セクション長が境界を超えていることに関するメッセージです。 ファイルの内部長さフィールドが実際のサイズと一致していません — これは通常、サポートされていないバリエーションというよりも、ファイルが切り捨てられたか破損していることを示します。
PsdSaveException Pascal 文字列の長さに関してです。 文字列値(レイヤー名やリソース名など)が 255 バイトを超えています。これは PSD の Pascal 文字列フィールドがエンコードできる最大サイズです。保存する前に値を短くしてください。
よくある質問
PsdLoadException と PsdSaveException は共通の基底例外型を共有していますか?
いいえ — 両方とも組み込みの Exception から直接派生しており、互いに、または共有の Aspose.PSD 基底例外クラスからは派生していません。
長い文字列値以外の理由で PsdSaveException が発生する可能性がありますか?
この FOSS ビルドで確認された例外発生箇所は Pascal 文字列長チェックです。その他の保存時 I/O 失敗(例: 書き込みできない宛先ストリーム)は、PsdSaveException でラップされるのではなく、基底の Python 例外型として表れます。
Exception を捕捉すると、これら 2 つの型も捕捉されますか?
はい、両方とも Exception から派生しているので — ただし、特定の型を捕捉することで、ロード失敗とセーブ失敗を区別できます。