Jak obsługiwać wyjątki PSD Core w Python
Aspose.PSD FOSS for Python definiuje dwa typy wyjątków: PsdLoadException, podnoszony podczas parsowania dokumentu PSD/PSB, oraz PsdSaveException, podnoszony podczas jego zapisywania. Oba dziedziczą po wbudowanym Exception i przyjmują wiadomość oraz opcjonalny wewnętrzny wyjątek.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
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:$PYTHONPATHKrok 2: Zaimportuj wymagane klasy
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveExceptionKrok 3: Przechwyć błędy w czasie ładowania
PsdLoadException jest podnoszone, gdy struktura dokumentu nie przechodzi walidacji — na przykład nieobsługiwana wersja PSD/PSB, długość sekcji przekraczająca zadeklarowaną granicę sekcji nadrzędnej lub obcięte dane strumienia:
try:
image = PsdImage.load("input.psd")
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")Krok 4: Przechwytywanie błędów zapisu
PsdSaveException jest podnoszone podczas zapisywania dokumentu — na przykład, gdy wartość łańcucha przekracza długość, jaką może pomieścić pole łańcucha Pascal w PSD (255 bajtów):
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")Krok 5: Zbadaj wewnętrzny wyjątek
Oba typy wyjątków akceptują argument konstruktora inner_exception (używany wewnętrznie, na przykład gdy błąd I/O przerywa odczyt struktury pliku). Sprawdź inner_exception, aby poznać przyczynę podstawową:
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}")Typowe problemy i rozwiązania
PsdLoadException z komunikatem o nieobsługiwanej wersji. Pole wersji PSD zadeklarowane w pliku nie jest ani standardową wartością PSD, ani wartością PSB dla dużych dokumentów. Potwierdź, że plik jest autentycznym, nieuszkodzonym dokumentem PSD/PSB.
PsdLoadException z komunikatem o długości sekcji przekraczającej granicę. Wewnętrzne pola długości w pliku są niezgodne z jego rzeczywistym rozmiarem — zwykle wskazuje to na obcięty lub uszkodzony plik, a nie na nieobsługiwaną wersję.
PsdSaveException dotyczące długości łańcucha Pascal. Wartość łańcucha (np. nazwa warstwy lub zasobu) przekracza 255 bajtów, co jest maksymalnym rozmiarem, jaki może zakodować pole łańcucha Pascal w PSD. Skróć wartość przed zapisaniem.
Najczęściej zadawane pytania
Czy PsdLoadException i PsdSaveException mają wspólny bazowy typ wyjątku?
Nie — oba dziedziczą bezpośrednio po wbudowanym Exception, a nie od siebie nawzajem ani od wspólnej klasy bazowej Aspose.PSD.
Czy PsdSaveException może wystąpić z przyczyn innych niż długa wartość łańcucha?
Potwierdzonym miejscem wyrzucenia w tej wersji FOSS jest sprawdzenie długości łańcucha Pascal. Inne niepowodzenia I/O w czasie zapisu (na przykład strumień docelowy, do którego nie można zapisać) pojawiają się jako podstawowy typ wyjątku Python, a nie są opakowywane w PsdSaveException.
Czy przechwycenie Exception będzie również przechwytywać te dwa typy?
Tak, ponieważ oba pochodzą od Exception — ale przechwycenie konkretnych typów pozwala odróżnić niepowodzenia ładowania od niepowodzeń zapisu.