Como lidar com exceções do PSD Core em Python

Como lidar com exceções do PSD Core em Python

Aspose.PSD FOSS para Python define dois tipos de exceção: PsdLoadException, lançada ao analisar um documento PSD/PSB, e PsdSaveException, lançada ao gravá-lo. Ambas derivam da Exception interna e aceitam uma mensagem mais uma exceção interna opcional.

Guia passo a passo

Etapa 1: Instalar o pacote

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

Etapa 2: Importar as classes necessárias

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveException

Etapa 3: Capturar falhas de carregamento

PsdLoadException é levantado quando a estrutura de um documento falha na validação — por exemplo, uma versão PSD/PSB não suportada, um comprimento de seção que excede o limite declarado da seção que a contém, ou dados de fluxo truncados:

try:
    image = PsdImage.load("input.psd")
except PsdLoadException as ex:
    print(f"Failed to load PSD/PSB file: {ex}")

Etapa 4: Capturar Falhas ao Salvar

PsdSaveException é levantado ao gravar um documento — por exemplo, quando um valor de string excede o comprimento que um campo de string Pascal do PSD pode conter (255 bytes):

try:
    image.save("output.psd")
except PsdSaveException as ex:
    print(f"Failed to save PSD/PSB file: {ex}")

Etapa 5: Inspecionar uma Exceção Interna

Ambos os tipos de exceção aceitam um argumento de construtor inner_exception (usado internamente, por exemplo, quando um erro de E/S interrompe a leitura da estrutura do arquivo). Verifique inner_exception para a causa subjacente:

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}")

Problemas Comuns e Correções

PsdLoadException com uma mensagem sobre uma versão não suportada. O campo de versão PSD declarado no arquivo não corresponde nem ao padrão PSD nem ao valor PSB de documento grande. Confirme que o arquivo é um documento PSD/PSB genuíno e não corrompido.

PsdLoadException com uma mensagem sobre um comprimento de seção que excede um limite. Os campos de comprimento internos do arquivo são inconsistentes com seu tamanho real — isso geralmente indica um arquivo truncado ou corrompido, e não uma variante não suportada.

PsdSaveException sobre o comprimento de uma string Pascal. Um valor de string (como o nome de uma camada ou recurso) excede 255 bytes, o máximo que um campo de string Pascal do PSD pode codificar. Reduza o valor antes de salvar.

Perguntas Frequentes

Os PsdLoadException e PsdSaveException compartilham um tipo de exceção base comum?

Não — ambos derivam diretamente do Exception incorporado, não um do outro nem de uma classe base de exceção Aspose.PSD compartilhada.

O PsdSaveException pode ocorrer por razões diferentes de um valor de string longo?

O ponto de elevação confirmado nesta compilação FOSS é a verificação do comprimento da string Pascal. Outras falhas de E/S no momento da gravação (por exemplo, um fluxo de destino que não pode ser escrito) aparecem como o tipo de exceção subjacente Python em vez de serem encapsuladas em PsdSaveException.

Capturar Exception também capturará esses dois tipos?

Sim, já que ambos derivam de Exception — mas capturar os tipos específicos permite distinguir falhas de carregamento de falhas de salvamento.

Ver também

 Português