如何在 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 —— 但捕获具体的类型可以让你区分加载失败和保存失败。