Wie man PSD Core-Ausnahmen in Python behandelt

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:$PYTHONPATH

Schritt 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 PsdSaveException

Schritt 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.

Siehe auch

 Deutsch