Основные исключения
Основные исключения
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 |