چگونه استثناهای هسته PSD را در Python مدیریت کنیم
Aspose.PSD FOSS برای Python دو نوع استثنا تعریف میکند: PsdLoadException که هنگام تجزیه یک سند PSD/PSB رخ میدهد، و PsdSaveException که هنگام نوشتن یک سند رخ میدهد. هر دو از Exception داخلی ارث میبرند و یک پیام بههمراه یک استثنا داخلی اختیاری میپذیرند.
راهنمای گام به گام
مرحله ۱: نصب بسته
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مرحله ۲: وارد کردن کلاسهای مورد نیاز
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveExceptionمرحله ۳: گرفتن خطاهای زمان بارگذاری
PsdLoadException زمانی ایجاد میشود که ساختار سند اعتبارسنجی را رد کند — برای مثال، نسخهٔ PSD/PSB پشتیبانینشده، طول بخشی که بیش از مرز اعلامشدهٔ بخش دربرگیرنده است، یا دادهٔ جریان کوتاهشده:
try:
image = PsdImage.load("input.psd")
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")مرحلهٔ ۴: دریافت خطاهای زمان ذخیرهسازی
PsdSaveException هنگام نوشتن یک سند ایجاد میشود — برای مثال، زمانی که مقدار یک رشته از طولی که فیلد رشتهٔ پاسکل PSD میتواند نگه دارد (۲۵۵ بایت) بیشتر شود:
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")مرحلهٔ ۵: بررسی استثنای داخلی
هر دو نوع استثنا یک آرگومان سازندهٔ inner_exception را میپذیرند (درونکلامی استفاده میشود، برای مثال، زمانی که خطای I/O خواندن ساختار فایل را قطع میکند). برای دلیل اصلی به 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 درباره طول رشتهٔ پاسکال. یک مقدار رشتهای (مانند نام لایه یا منبع) بیش از ۲۵۵ بایت است، حداکثر مقداری که فیلد رشتهٔ پاسکال PSD میتواند رمزگذاری کند. پیش از ذخیرهسازی مقدار را کوتاه کنید.
سوالات متداول
آیا PsdLoadException و PsdSaveException یک نوع استثنای پایه مشترک دارند؟
خیر — هر دو مستقیماً از Exception داخلی ارث میبرند، نه از یکدیگر یا یک کلاس استثنای پایه مشترک Aspose.PSD.
آیا PsdSaveException میتواند به دلایل دیگری جز مقدار رشته طولانی رخ دهد؟
محل تأیید شدهی پرتاب در این ساخت FOSS، بررسی طول رشته پاسکال است. سایر شکستهای I/O در زمان ذخیرهسازی (برای مثال، یک جریان مقصد که قابل نوشتن نیست) بهعنوان نوع استثنای زیرین Python ظاهر میشوند نه اینکه در PsdSaveException پیچیده شوند.
آیا گرفتن Exception همچنین این دو نوع را نیز میگیرد؟
بله، چون هر دو از Exception مشتق میشوند — اما شناسایی انواع خاص به شما امکان میدهد که شکستهای بارگذاری را از شکستهای ذخیرهسازی تفکیک کنید.