Основные исключения

Основные исключения

Основные исключения

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, заполняемый, когда базовый сбой ввода/вывода вызвал исключение:

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)Вызвано read-only-in-this-FOSS-build setters

См. также:

 Русский