Hoe PSD Core-excepties af te handelen in Python
Aspose.PSD FOSS voor Python definieert twee exceptietypen: PsdLoadException, opgegooid tijdens het parseren van een PSD/PSB document, en PsdSaveException, opgegooid tijdens het schrijven ervan. Beide zijn afgeleid van de ingebouwde Exception en accepteren een bericht plus een optionele innerlijke exceptie.
Stapsgewijze handleiding
Stap 1: Installeer het pakket
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:$PYTHONPATHStap 2: Importeer de vereiste klassen
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveExceptionStap 3: Vang laad-fouten op
PsdLoadException wordt opgegooid wanneer de structuur van een document de validatie niet doorstaat — bijvoorbeeld een niet-ondersteunde PSD/PSB versie, een sectielengte die de verklaarde grens van de omvattende sectie overschrijdt, of afgekorte streamgegevens:
try:
image = PsdImage.load("input.psd")
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")Stap 4: Vang opslaan-tijd fouten op
PsdSaveException wordt opgegooid tijdens het schrijven van een document — bijvoorbeeld wanneer een tekenreekswaarde de lengte overschrijdt die een PSD Pascal-tekenreeksveld kan bevatten (255 bytes):
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")Stap 5: Inspecteer een interne exceptie
Beide exceptietypen accepteren een inner_exception constructorargument (intern gebruikt, bijvoorbeeld wanneer een I/O-fout het lezen van de bestandstructuur onderbreekt). Controleer inner_exception voor de onderliggende oorzaak:
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}")Veelvoorkomende problemen en oplossingen
PsdLoadException met een bericht over een niet-ondersteunde versie. Het PSD-versieveld dat in het bestand is opgegeven, is noch de standaard-PSD noch de grote-document-PSB-waarde. Bevestig dat het bestand een echt, onbeschadigd PSD/PSB-document is.
PsdLoadException met een bericht over een sectielengte die een grens overschrijdt. De interne lengtevelden van het bestand komen niet overeen met de werkelijke grootte — dit duidt meestal op een afgekapt of beschadigd bestand in plaats van een niet-ondersteunde variant.
PsdSaveException over een Pascal-tekenreekslengte. Een tekenreekswaarde (zoals een laag- of resource-naam) overschrijdt 255 bytes, het maximum dat een PSD-Pascal-tekenreeksveld kan coderen. Verkort de waarde vóór het opslaan.
Veelgestelde vragen
Delen PsdLoadException en PsdSaveException een gemeenschappelijk basistype voor uitzonderingen?
Nee — beide afleiden rechtstreeks van de ingebouwde Exception, niet van elkaar of van een gedeelde Aspose.PSD basisklasse voor uitzonderingen.
Kan PsdSaveException optreden om andere redenen dan een lange tekenreekswaarde?
De bevestigde plaats waar de uitzondering wordt opgegooid in deze FOSS-build is de controle op de Pascal-tekenreekslengte. Andere I/O-fouten tijdens het opslaan (bijvoorbeeld een bestemmings-stream die niet kan worden weggeschreven) komen naar voren als het onderliggende Python-uitzonderingstype in plaats van te worden gewikkeld in PsdSaveException.
Zal het afvangen van Exception ook deze twee typen vangen?
Ja, omdat beide afstammen van Exception — maar door de specifieke types af te vangen kun je laadfouten onderscheiden van opslaffouten.