Wie man PSD Core-Ausnahmen in Python behandelt
Aspose.PSD FOSS für Python definiert zwei Ausnahmetypen: PsdLoadException, ausgelöst beim Parsen eines PSD/PSB Dokuments, und PsdSaveException, ausgelöst beim Schreiben eines solchen. Beide erben von dem eingebauten Exception und akzeptieren eine Nachricht sowie eine optionale innere Ausnahme.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
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:$PYTHONPATHSchritt 2: Erforderliche Klassen importieren
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveExceptionSchritt 3: Ladezeitfehler abfangen
PsdLoadException wird ausgelöst, wenn die Struktur eines Dokuments die Validierung nicht besteht — zum Beispiel eine nicht unterstützte PSD/PSB-Version, eine Abschnittslänge, die die deklarierte Grenze des umschließenden Abschnitts überschreitet, oder abgeschnittene Stream-Daten:
try:
image = PsdImage.load("input.psd")
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")Schritt 4: Fehler beim Speichern abfangen
PsdSaveException wird ausgelöst, während ein Dokument geschrieben wird — zum Beispiel, wenn ein Zeichenkettenwert die Länge überschreitet, die ein PSD-Pascal-String-Feld halten kann (255Byte):
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")Schritt 5: Innere Ausnahme prüfen
Beide Ausnahmetypen akzeptieren ein inner_exception-Konstruktorargument (intern verwendet, zum Beispiel wenn ein I/O-Fehler das Lesen der Dateistruktur unterbricht). Prüfen Sie inner_exception auf die zugrunde liegende Ursache:
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}")Häufige Probleme und Lösungen
PsdLoadException mit einer Meldung über eine nicht unterstützte Version. Das im Dateikopf deklarierte PSD-Versionsfeld ist weder der Standard-PSD- noch der Large-Document-PSB-Wert. Stellen Sie sicher, dass die Datei ein echtes, unverfälschtes PSD/PSB-Dokument ist.
PsdLoadException mit einer Meldung, dass die Abschnittslänge eine Grenze überschreitet. Die internen Längenfelder der Datei stimmen nicht mit ihrer tatsächlichen Größe überein – das deutet in der Regel auf eine abgeschnittene oder beschädigte Datei hin und nicht auf eine nicht unterstützte Variante.
PsdSaveException über die Länge einer Pascal-Zeichenkette. Ein Zeichenkettenwert (z.B. ein Ebenen- oder Ressourcename) überschreitet 255Byte, das Maximum, das ein PSD-Pascal-String-Feld codieren kann. Kürzen Sie den Wert vor dem Speichern.
Häufig gestellte Fragen
Teilen PsdLoadException und PsdSaveException einen gemeinsamen Basisausnahmetyp?
Nein — beide erben direkt vom eingebauten Exception, nicht voneinander oder von einer gemeinsamen Aspose.PSD Basisausnahmeklasse.
Kann PsdSaveException aus anderen Gründen als einem langen Zeichenkettenwert auftreten?
Die bestätigte Auslöse-Stelle in diesem FOSS-Build ist die Prüfung der Pascal-String-Länge. Andere I/O-Fehler zur Speicherzeit (zum Beispiel ein Ziel-Stream, in den nicht geschrieben werden kann) treten als der zugrunde liegende Python-Ausnahmetyp auf, anstatt in PsdSaveException eingekapselt zu werden.
Wird das Abfangen von Exception auch diese beiden Typen erfassen?
Ja, da beide von Exception abgeleitet sind — aber das Abfangen der konkreten Typen ermöglicht es, Ladefehler von Speicherfehlern zu unterscheiden.