核心异常
核心异常
Aspose.PSD FOSS for Python 定义了两种特定于 PSD/PSB 处理的异常类型:PsdLoadException(在解析文档时抛出),以及 PsdSaveException(在写入文档时抛出)。两者均继承自内置的 Exception,并接受一条消息以及可选的 inner_exception。
捕获加载时失败
PsdLoadException 在解析文档时因多种结构验证失败而被抛出:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
try:
image = PsdImage.load(input_path)
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")常见信息包括 "Invalid PSD signature. Expected '8BPS' (0x38425053)."(文件未以 PSD/PSB 签名开头),"Unsupported PSD version: {n}. ..."(版本字段既不是 PSD 也不是 PSB),以及 "{section} length {n} exceeds the enclosing section boundary."(某节声明的长度与文件实际大小不一致)。
捕获保存时失败
PsdSaveException 在此 FOSS 构建中只有一个抛出位置——对 Pascal 字符串长度的检查:
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveException
try:
image.save(output_path)
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")它的消息是 "PSD Pascal string length {n} exceeds the supported maximum 255." — 当图层或资源名称超过 255 字节时抛出。
检查内部异常
这两种异常类型都接受一个 inner_exception 构造函数参数,该参数会在底层 I/O 失败导致异常时被填充:
try:
image = PsdImage.load(input_path)
except PsdLoadException as ex:
if ex.inner_exception is not None:
print(f"Underlying cause: {ex.inner_exception}")NotSupportedException 模式
在 API 的其他位置,有多个属性设置器会抛出 NotSupportedException 而不是 PsdLoadException/PsdSaveException —— 这表明该属性在此 FOSS 构建中被有意设为只读,而非解析或写入错误。参见 Resources and Layers 查看受影响的具体属性。
提示与最佳实践
- 在需要区分加载失败和保存失败时,请专门捕获
PsdLoadException和PsdSaveException,而不是基类Exception。 ArgumentNullException(当PsdImage.load使用None流调用时抛出)和NotSupportedException是独立的异常类型 — 并非PsdLoadException/PsdSaveException的变体。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
PsdLoadException 关于不受支持的版本 | 文件的版本字段既不是标准的 PSD 也不是 PSB 值 | 确认文件是一个真实且未损坏的 PSD/PSB 文档 |
PsdSaveException 关于 Pascal 字符串长度 | 图层或资源名称超过 255 字节 | 在保存之前请缩短该值 |
FAQ
PsdLoadException 和 PsdSaveException 是否共享一个公共的基异常类型?
不 — 两者直接派生自内置的 Exception,而不是相互之间或共享的 Aspose.PSD 基异常类。
捕获 Exception 是否也会捕获这两种类型?
是的,因为两者都派生自 Exception — 但捕获具体类型可以让你区分加载失败和保存失败。
API Reference 摘要
| 类/方法 | 描述 |
|---|---|
PsdLoadException(message, inner_exception=None) | 在文档解析期间抛出 |
PsdSaveException(message, inner_exception=None) | 在文档编写期间抛出 |
NotSupportedException(message, inner_exception=None) | 由此 FOSS 构建中的只读设置器抛出 |