Hur man hanterar PSD Core-undantag i Python
Aspose.PSD FOSS för Python definierar två undantagstyper: PsdLoadException, som kastas vid parsning av ett PSD/PSB-dokument, och PsdSaveException, som kastas vid skrivning av ett sådant. Båda ärver från den inbyggda Exception och accepterar ett meddelande samt ett valfritt inre undantag.
Steg-för-steg-guide
Steg 1: Installera paketet
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:$PYTHONPATHSteg 2: Importera erforderliga klasser
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveExceptionSteg 3: Fånga fel vid inläsning
PsdLoadException kastas när ett dokuments struktur misslyckas med validering — till exempel en ej stödjande PSD/PSB version, en sektionslängd som överskrider den omslutande sektionens deklarerade gräns, eller trunkerad strömdatadata:
try:
image = PsdImage.load("input.psd")
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")Steg 4: Fånga fel vid sparning
PsdSaveException kastas när ett dokument skrivs — till exempel när ett strängvärde överskrider den längd som ett PSD Pascal-strängfält kan hålla (255 byte):
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")Steg 5: Inspektera ett inre undantag
Båda undantagstyperna accepterar ett inner_exception-konstruktörsargument (används internt, till exempel när ett I/O-fel avbryter läsning av filstrukturen). Kontrollera inner_exception för den underliggande orsaken:
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}")Vanliga problem och lösningar
PsdLoadException med ett meddelande om en ej stödd version. Filens deklarerade PSD-versionsfält är varken det standard-PSD-värdet eller det stora dokument-PSB-värdet. Bekräfta att filen är ett äkta, okorrupt PSD/PSB-dokument.
PsdLoadException med ett meddelande om att en sektionslängd överskrider en gräns. Filens interna längdfält är inkonsekventa med dess faktiska storlek — detta indikerar vanligtvis en avkortad eller korrupt fil snarare än en ej stödd variant.
PsdSaveException om en Pascal-stränglängd. Ett strängvärde (t.ex. ett lager- eller resursnamn) överskrider 255 byte, det maximala som ett PSD-Pascal-strängfält kan koda. Förkorta värdet innan du sparar.
Vanliga frågor
Delar PsdLoadException och PsdSaveException en gemensam basundantagstyp?
Nej — båda ärver direkt från den inbyggda Exception, inte från varandra eller en gemensam Aspose.PSD basundantagsklass.
Kan PsdSaveException uppstå av andra skäl än ett långt strängvärde?
Den bekräftade upphöjningsplatsen i detta FOSS-bygge är kontrollen av Pascal-stränglängden. Andra I/O-fel vid sparning (t.ex. ett destinationsflöde som inte kan skrivas till) visas som den underliggande Python undantagstypen snarare än att vara inbäddade i PsdSaveException.
Kommer fånga Exception också att fånga dessa två typer?
Ja, eftersom båda härstammar från Exception — men att fånga de specifika typerna låter dig skilja på laddningsfel och sparfel.