Cara Menangani Pengecualian PSD Core di Python
Aspose.PSD FOSS untuk Python mendefinisikan dua tipe pengecualian: PsdLoadException, yang dilempar saat parsing dokumen PSD/PSB, dan PsdSaveException, yang dilempar saat menulisnya. Keduanya diturunkan dari Exception bawaan dan menerima pesan serta pengecualian dalam opsional.
Panduan Langkah demi Langkah
Langkah 1: Instal Paket
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:$PYTHONPATHLangkah 2: Impor Kelas yang Diperlukan
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveExceptionLangkah 3: Tangkap Kegagalan Saat Muat
PsdLoadException muncul ketika struktur dokumen gagal validasi — misalnya, versi PSD/PSB yang tidak didukung, panjang bagian yang melebihi batas yang ditetapkan pada bagian yang menutupinya, atau data aliran yang terpotong:
try:
image = PsdImage.load("input.psd")
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")Langkah 4: Tangkap Kegagalan Saat Menyimpan
PsdSaveException muncul saat menulis dokumen — misalnya, ketika nilai string melebihi panjang yang dapat ditampung oleh bidang string Pascal PSD (255 byte):
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")Langkah 5: Periksa Pengecualian Internal
Kedua tipe pengecualian menerima argumen konstruktor inner_exception (digunakan secara internal, misalnya, ketika kesalahan I/O menginterupsi pembacaan struktur file). Periksa inner_exception untuk penyebab dasarnya:
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}")Masalah Umum dan Solusi
PsdLoadException dengan pesan tentang versi yang tidak didukung. Kolom versi PSD yang dideklarasikan dalam berkas bukan nilai PSD standar maupun nilai PSB dokumen besar. Pastikan berkas tersebut adalah dokumen PSD/PSB yang asli dan tidak rusak.
PsdLoadException dengan pesan tentang panjang bagian yang melebihi batas. Kolom panjang internal berkas tidak konsisten dengan ukuran sebenarnya — hal ini biasanya menunjukkan berkas yang terpotong atau rusak, bukan varian yang tidak didukung.
PsdSaveException tentang panjang string Pascal. Nilai string (seperti nama lapisan atau sumber daya) melebihi 255 byte, batas maksimum yang dapat dienkode oleh kolom string Pascal PSD. Perpendek nilai tersebut sebelum menyimpan.
Pertanyaan yang Sering Diajukan
Apakah PsdLoadException dan PsdSaveException berbagi tipe pengecualian dasar yang sama?
Tidak — keduanya diturunkan langsung dari Exception bawaan, bukan dari satu sama lain atau dari kelas pengecualian dasar Aspose.PSD yang sama.
Apakah PsdSaveException dapat terjadi karena alasan selain nilai string yang panjang?
Lokasi raise yang terkonfirmasi dalam build FOSS ini adalah pemeriksaan panjang string Pascal. Kegagalan I/O saat penyimpanan lainnya (misalnya, aliran tujuan yang tidak dapat ditulisi) muncul sebagai tipe pengecualian Python yang mendasari, bukan dibungkus dalam PsdSaveException.
Apakah menangkap Exception juga akan menangkap kedua tipe ini?
Ya, karena keduanya diturunkan dari Exception — tetapi menangkap tipe spesifik memungkinkan Anda membedakan kegagalan pemuatan dari kegagalan penyimpanan.