Основні виключення
Основні виключення
Aspose.PSD FOSS для 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 про непідтримувану версію | Поле version файлу не є ні стандартним значенням 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) | Піднято read-only-in-this-FOSS-build сеттерами |