如何在 Python 中处理 PSD Core 异常

如何在 Python 中处理 PSD Core 异常

Aspose.PSD FOSS for Python 定义了两种异常类型:PsdLoadException(在解析 PSD/PSB 文档时抛出),以及 PsdSaveException(在写入文档时抛出)。两者都继承自内置的 Exception,并接受一条消息以及可选的内部异常。

分步指南

步骤 1:安装软件包

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

步骤 2:导入所需类

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

步骤 3:捕获加载时的失败

PsdLoadException 在文档结构未通过验证时抛出——例如,不受支持的 PSD/PSB 版本、节长度超出其所在节声明的边界,或流数据被截断:

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

步骤 4:捕获保存时的失败

PsdSaveException 在写入文档时抛出——例如,当字符串值超过 PSD Pascal 字符串字段能够容纳的长度(255 字节)时:

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

步骤 5:检查内部异常

两种异常类型都接受一个 inner_exception 构造函数参数(内部使用,例如在 I/O 错误中断读取文件结构时)。请检查 inner_exception 以了解根本原因:

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

常见问题与解决方案

PsdLoadException 带有关于不受支持版本的消息。 文件声明的 PSD 版本字段既不是标准 PSD,也不是大文档 PSB 值。请确认该文件是一个真实且未损坏的 PSD/PSB 文档。

PsdLoadException 带有关于节长度超出边界的消息。 文件内部的长度字段与实际大小不一致——这通常表明文件被截断或损坏,而不是不受支持的变体。

PsdSaveException 关于 Pascal 字符串长度。 字符串值(例如图层或资源名称)超过 255 字节,这是 PSD Pascal 字符串字段能够编码的最大长度。请在保存前缩短该值。

常见问题

PsdLoadException 和 PsdSaveException 是否共享相同的基异常类型?

不 — 两者都直接派生自内置的 Exception,而不是相互派生或来自共享的 Aspose.PSD 基异常类。

除了字符串过长之外,PsdSaveException 还能因其他原因发生吗?

在此 FOSS 构建中,确认的抛出位置是 Pascal-string-length 检查。其他保存时的 I/O 失败(例如,目标流不可写)会以底层的 Python 异常类型出现,而不是被包装在 PsdSaveException 中。

捕获 Exception 是否也会捕获这两种类型?

是的,因为两者都派生自 Exception —— 但捕获具体的类型可以让你区分加载失败和保存失败。

另请参阅

 中文