Come gestire le eccezioni di PSD Core in Python
Aspose.PSD FOSS per Python definisce due tipi di eccezione: PsdLoadException, sollevata durante l’analisi di un documento PSD/PSB, e PsdSaveException, sollevata durante la scrittura di uno. Entrambe derivano dall’Exception incorporato e accettano un messaggio più un’eventuale eccezione interna.
Guida passo-passo
Passo 1: Installa il pacchetto
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:$PYTHONPATHPasso 2: Importa le classi richieste
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveExceptionPasso 3: Gestisci i fallimenti al caricamento
PsdLoadException viene sollevato quando la struttura di un documento non supera la convalida — ad esempio, una versione PSD/PSB non supportata, una lunghezza di sezione che supera il confine dichiarato della sezione contenente, o dati di flusso troncati:
try:
image = PsdImage.load("input.psd")
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")Passo 4: Cattura i fallimenti al momento del salvataggio
PsdSaveException viene sollevato durante la scrittura di un documento — ad esempio, quando il valore di una stringa supera la lunghezza che un campo stringa Pascal PSD può contenere (255 byte):
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")Passo 5: Ispeziona un’eccezione interna
Entrambi i tipi di eccezione accettano un argomento costruttore inner_exception (usato internamente, ad esempio, quando un errore I/O interrompe la lettura della struttura del file). Controlla inner_exception per la causa sottostante:
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}")Problemi comuni e soluzioni
PsdLoadException con un messaggio riguardo a una versione non supportata. Il campo della versione PSD dichiarato nel file non corrisponde né al valore standard PSD né a quello del documento di grandi dimensioni PSB. Conferma che il file è un documento PSD/PSB genuino e non corrotto.
PsdLoadException con un messaggio riguardo a una lunghezza di sezione che supera un limite. I campi di lunghezza interni del file sono incoerenti con le sue dimensioni effettive — questo di solito indica un file troncato o corrotto piuttosto che una variante non supportata.
PsdSaveException riguardo alla lunghezza di una stringa Pascal. Un valore stringa (ad esempio il nome di un livello o di una risorsa) supera i 255 byte, il massimo che un campo di stringa Pascal PSD può codificare. Accorcia il valore prima di salvare.
Domande Frequenti
I PsdLoadException e PsdSaveException condividono un tipo di eccezione base comune?
No — entrambi derivano direttamente dall’Exception incorporato, non l’uno dall’altro né da una classe di eccezione base Aspose.PSD condivisa.
Può PsdSaveException verificarsi per motivi diversi da un valore di stringa lungo?
Il punto di sollevamento confermato in questa build FOSS è il controllo della lunghezza della stringa Pascal. Altri errori I/O durante il salvataggio (ad esempio, un flusso di destinazione non scrivibile) emergono come il tipo di eccezione Python sottostante piuttosto che essere avvolti in PsdSaveException.
Catturare Exception intercetterà anche questi due tipi?
Sì, poiché entrambi derivano da Exception — ma catturare i tipi specifici ti consente di distinguere i fallimenti di caricamento da quelli di salvataggio.