Jak zacházet s výjimkami PSD Core v Python

Jak zacházet s výjimkami PSD Core v Python

Aspose.PSD FOSS pro Python definuje dva typy výjimek: PsdLoadException, vyvolaná při parsování dokumentu PSD/PSB, a PsdSaveException, vyvolaná při jeho zápisu. Obě jsou odvozeny od vestavěné Exception a přijímají zprávu plus volitelnou vnitřní výjimku.

Průvodce krok za krokem

Krok 1: Nainstalujte balíček

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

Krok 2: Importujte požadované třídy

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveException

Krok 3: Zachyťte selhání při načítání

PsdLoadException je vyvoláno, když struktura dokumentu neprojde validací — například nepodporovaná verze PSD/PSB, délka sekce, která překračuje deklarovanou hranici obklopující sekce, nebo zkrácená data proudu:

try:
    image = PsdImage.load("input.psd")
except PsdLoadException as ex:
    print(f"Failed to load PSD/PSB file: {ex}")

Krok 4: Zachytit chyby během ukládání

PsdSaveException je vyvoláno při zápisu dokumentu — například když hodnota řetězce překročí délku, kterou může pole PSD Pascal string pojmout (255 bajtů):

try:
    image.save("output.psd")
except PsdSaveException as ex:
    print(f"Failed to save PSD/PSB file: {ex}")

Krok 5: Prozkoumat vnitřní výjimku

Oba typy výjimek přijímají konstruktorový argument inner_exception (používá se interně, například když vstupně/výstupní chyba přeruší čtení struktury souboru). Zkontrolujte inner_exception pro zjištění základní příčiny:

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}")

Časté problémy a opravy

PsdLoadException s zprávou o nepodporované verzi. Pole verze PSD deklarované v souboru není ani standardní PSD, ani hodnota pro velký dokument PSB. Ověřte, že soubor je pravý, nepoškozený PSD/PSB dokument.

PsdLoadException s zprávou o tom, že délka sekce překračuje hranici. Interní pole délky v souboru nesouhlasí s jeho skutečnou velikostí — to obvykle naznačuje oříznutý nebo poškozený soubor, nikoli nepodporovanou variantu.

PsdSaveException o délce Pascalova řetězce. Řetězcová hodnota (například název vrstvy nebo zdroje) překračuje 255 bajtů, maximální kapacitu pole Pascalova řetězce v PSD. Zkraťte hodnotu před uložením.

Často kladené otázky

Mají PsdLoadException a PsdSaveException společný základní typ výjimky?

Ne— oba odvozují přímo od vestavěného Exception, ne od sebe navzájem ani od sdílené základní třídy výjimek Aspose.PSD.

Může se PsdSaveException vyskytnout zdůvodů jiných než dlouhá hodnota řetězce?

Potvrzeným místem vyvolání vtéto FOSS verzi je kontrola délky Pascalova řetězce. Další selhání I/O během ukládání (například cílový stream, do kterého nelze zapisovat) se projeví jako podkladový typ výjimky Python místo toho, aby byly zabaleny do PsdSaveException.

Zachytí-li se Exception, zachytí se také tyto dva typy?

Ano, protože oba odvozují z Exception — ale zachycení konkrétních typů vám umožní rozlišit selhání načítání od selhání ukládání.

Viz také:

 Čeština