Cómo manejar excepciones del núcleo PSD en Python
Aspose.PSD FOSS para Python define dos tipos de excepciones: PsdLoadException, lanzada al analizar un documento PSD/PSB, y PsdSaveException, lanzada al escribir uno. Ambas derivan del Exception incorporado y aceptan un mensaje más una excepción interna opcional.
Guía paso a paso
Paso 1: Instalar el paquete
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:$PYTHONPATHPaso 2: Importar las clases requeridas
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveExceptionPaso 3: Capturar fallas en tiempo de carga
PsdLoadException se genera cuando la estructura de un documento no pasa la validación — por ejemplo, una versión PSD/PSB no compatible, una longitud de sección que supera el límite declarado de la sección contenedora, o datos de flujo truncados:
try:
image = PsdImage.load("input.psd")
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")Paso 4: Capturar fallas en tiempo de guardado
PsdSaveException se genera al escribir un documento — por ejemplo, cuando el valor de una cadena supera la longitud que un campo de cadena Pascal de PSD puede contener (255 bytes):
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")Paso 5: Inspeccionar una excepción interna
Ambos tipos de excepción aceptan un argumento de constructor inner_exception (utilizado internamente, por ejemplo, cuando un error de E/S interrumpe la lectura de la estructura del archivo). Consulte inner_exception para conocer la causa subyacente:
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 comunes y soluciones
PsdLoadException con un mensaje sobre una versión no compatible. El campo de versión PSD declarado del archivo no es ni el PSD estándar ni el valor PSB de documento grande. Confirme que el archivo es un documento PSD/PSB genuino y sin corrupción.
PsdLoadException con un mensaje sobre una longitud de sección que supera un límite. Los campos de longitud internos del archivo son inconsistentes con su tamaño real — esto suele indicar un archivo truncado o corrupto más que una variante no compatible.
PsdSaveException sobre la longitud de una cadena Pascal. Un valor de cadena (como el nombre de una capa o recurso) supera los 255bytes, el máximo que puede codificar un campo de cadena Pascal en PSD. Acorte el valor antes de guardar.
Preguntas frecuentes
¿Comparten PsdLoadException y PsdSaveException un tipo de excepción base común?
No — ambos derivan directamente del Exception incorporado, no el uno del otro ni de una clase de excepción base Aspose.PSD compartida.
¿Puede PsdSaveException ocurrir por razones distintas a un valor de cadena largo?
El sitio de lanzamiento confirmado en esta compilación FOSS es la comprobación de longitud de cadena Pascal. Otros fallos de E/S en tiempo de guardado (por ejemplo, una corriente de destino que no se puede escribir) aparecen como el tipo de excepción subyacente Python en lugar de estar envueltos en PsdSaveException.
¿Capturar Exception también atrapará estos dos tipos?
Sí, ya que ambos derivan de Exception — pero al capturar los tipos específicos te permite distinguir los fallos de carga de los fallos de guardado.