Як обробляти виключення ядра PSD у Python
Aspose.PSD FOSS для 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 виникає під час запису документа — наприклад, коли значення рядка перевищує довжину, яку може вмістити поле Pascal-рядка PSD (255 байт):
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")Крок 5: Перевірити внутрішнє виключення
Обидва типи виключень приймають аргумент конструктора inner_exception (використовується внутрішньо, наприклад, коли помилка вводу/виводу перериває читання структури файлу). Перевірте 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 байт, максимальну довжину, яку може закодувати поле Pascal-рядка у PSD. Скоротіть значення перед збереженням.
Часті запитання
Чи мають PsdLoadException і PsdSaveException спільний базовий тип виключення?
Ні — обидва успадковуються безпосередньо від вбудованого Exception, а не один від одного чи спільного базового класу виключень Aspose.PSD.
Чи може PsdSaveException виникнути з причин, відмінних від довгого рядкового значення?
Підтвердженим місцем генерування в цьому FOSS-збірці є перевірка довжини Pascal-рядка. Інші помилки вводу/виводу під час збереження (наприклад, потік призначення, у який неможливо записати) відображаються як базовий тип виключення Python, а не обгорнуті в PsdSaveException.
Чи буде перехоплення Exception також ловити ці два типи?
Так, оскільки обидва успадковуються від Exception — але перехоплення конкретних типів дозволяє розрізняти збої завантаження від збоїв збереження.