Podstawowe wyjątki
Podstawowe wyjątki
Aspose.PSD FOSS dla Python definiuje dwa typy wyjątków specyficzne dla obsługi PSD/PSB: PsdLoadException, podnoszony podczas parsowania dokumentu, oraz PsdSaveException, podnoszony podczas zapisywania. Oba dziedziczą po wbudowanym Exception i przyjmują wiadomość oraz opcjonalny inner_exception.
Łapanie błędów w czasie ładowania
PsdLoadException jest podnoszony przy kilku błędach walidacji strukturalnej podczas parsowania dokumentu:
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}")Typowe komunikaty obejmują "Invalid PSD signature. Expected '8BPS' (0x38425053)." (plik nie zaczyna się od sygnatury PSD/PSB), "Unsupported PSD version: {n}. ..." (pole wersji nie jest ani PSD, ani PSB) oraz "{section} length {n} exceeds the enclosing section boundary." (zadeklarowana długość sekcji jest niezgodna z rzeczywistym rozmiarem pliku).
Łapanie błędów w czasie zapisu
PsdSaveException ma jedyne miejsce podnoszenia w tej wersji FOSS — sprawdzenie długości ciągu 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}")Jego komunikat to "PSD Pascal string length {n} exceeds the supported maximum 255." — podnoszony, gdy nazwa warstwy lub zasobu przekracza 255 bajtów.
Sprawdzanie wewnętrznego wyjątku
Oba typy wyjątków akceptują argument konstruktora inner_exception, wypełniany, gdy podstawowa awaria I/O spowodowała wyjątek:
try:
image = PsdImage.load(input_path)
except PsdLoadException as ex:
if ex.inner_exception is not None:
print(f"Underlying cause: {ex.inner_exception}")Wzorzec NotSupportedException
Kilka setterów właściwości w innych miejscach w API zgłasza NotSupportedException zamiast PsdLoadException/PsdSaveException — to sygnalizuje właściwość, która jest celowo tylko do odczytu w tej wersji FOSS, a nie błąd parsowania lub zapisu. Zobacz Resources and Layers dla konkretnych właściwości, które są dotknięte.
Wskazówki i najlepsze praktyki
- Przechwytuj
PsdLoadExceptioniPsdSaveExceptionkonkretnie, zamiast bazowegoException, gdy musisz odróżnić błędy ładowania od błędów zapisu. ArgumentNullException(podnoszony, gdyPsdImage.loadjest wywoływany zNonestrumieniem) orazNotSupportedExceptionsą odrębnymi typami wyjątków — nie wariantamiPsdLoadException/PsdSaveException.
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
PsdLoadException o nieobsługiwanej wersji | Pole wersji pliku nie jest ani standardową wartością PSD, ani PSB | Potwierdź, że plik jest autentycznym, nieuszkodzonym PSD/PSB dokumentem |
PsdSaveException o długości łańcucha Pascal | Nazwa warstwy lub zasobu przekracza 255 bajtów | Skróć wartość przed zapisem |
FAQ
Czy PsdLoadException i PsdSaveException mają wspólny bazowy typ wyjątku?
Nie — oba dziedziczą bezpośrednio z wbudowanego Exception, nie z siebie nawzajem ani ze wspólnej klasy bazowej Aspose.PSD.
Czy przechwycenie Exception również przechwyci te dwa typy?
Tak, ponieważ oba dziedziczą po Exception — ale przechwycenie konkretnych typów pozwala odróżnić błędy ładowania od błędów zapisu.
Podsumowanie API Reference
| Klasa/Metoda | Opis |
|---|---|
PsdLoadException(message, inner_exception=None) | Wystąpiło podczas parsowania dokumentu |
PsdSaveException(message, inner_exception=None) | Zgłaszane podczas tworzenia dokumentu |
NotSupportedException(message, inner_exception=None) | Zgłaszane przez settery w trybie tylko do odczytu w tej wersji FOSS |