كيفية معالجة استثناءات PSD Core في 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 أثناء كتابة المستند — على سبيل المثال، عندما تتجاوز قيمة السلسلة الطول الذي يمكن لحقل سلسلة باسكال في 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 حول طول سلسلة باسكال. قيمة السلسلة (مثل اسم الطبقة أو المورد) تتجاوز 255 بايت، وهو الحد الأقصى الذي يمكن لحقل سلسلة باسكال في PSD تشفيره. قم بتقصير القيمة قبل الحفظ.
الأسئلة المتكررة
هل PsdLoadException و PsdSaveException تشتركان في نوع استثناء أساسي مشترك؟
لا — كلاهما يشتقان مباشرةً من Exception المدمج، وليس من بعضهما البعض أو من فئة استثناء أساسية مشتركة Aspose.PSD.
هل يمكن أن يحدث PsdSaveException لأسباب غير قيمة النص الطويل؟
الموقع المؤكد لرفع الاستثناء في هذا البناء المفتوح المصدر هو فحص طول سلسلة الباسكال. الأخطاء الأخرى أثناء حفظ الإدخال/الإخراج (مثلاً، تدفق الوجهة الذي لا يمكن الكتابة إليه) تظهر كنوع الاستثناء الأساسي Python بدلاً من أن تُلف في PsdSaveException.
هل سيتسبب التقاط Exception أيضاً في التقاط هذين النوعين؟
نعم، بما أن كليهما مشتقان من Exception — لكن تحديد الأنواع المحددة يتيح لك التمييز بين فشل التحميل وفشل الحفظ.