วิธีจัดการข้อยกเว้น 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 จะถูกโยนขึ้นระหว่างการเขียนเอกสาร — ตัวอย่างเช่น เมื่อค่าสตริงเกินความยาวที่ฟิลด์สตริง Pascal ของ PSD สามารถเก็บได้ (255 ไบต์):
try:
image.save("output.psd")
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")ขั้นตอนที่ 5: ตรวจสอบข้อยกเว้นภายใน
ทั้งสองประเภทของข้อยกเว้นรับอาร์กิวเมนต์คอนสตรัคเตอร์ 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 เกี่ยวกับความยาวของสตริง Pascal. ค่าสตริง (เช่นชื่อเลเยอร์หรือชื่อรีซอร์ส) มีขนาดเกิน 255 ไบต์ ซึ่งเป็นขีดจำกัดสูงสุดที่ฟิลด์สตริง Pascal ของ PSD สามารถเข้ารหัสได้ ลดขนาดค่าก่อนบันทึก.
คำถามที่พบบ่อย
PsdLoadException และ PsdSaveException มีประเภทข้อยกเว้นฐานร่วมกันหรือไม่?
ไม่ — ทั้งสองสืบทอดโดยตรงจาก Exception ที่สร้างขึ้นในระบบ, ไม่ได้มาจากกันและกันหรือจากคลาสข้อยกเว้นฐาน Aspose.PSD ที่แชร์ร่วมกัน.
สามารถเกิด PsdSaveException ได้จากสาเหตุอื่นที่ไม่ใช่ค่าสตริงที่ยาวหรือไม่?
จุดที่ยกข้อยกเว้นที่ยืนยันในรุ่น FOSS นี้คือการตรวจสอบความยาวของสตริง Pascal. ข้อผิดพลาด I/O ขณะบันทึกอื่น ๆ (เช่น สตรีมปลายทางที่ไม่สามารถเขียนได้) จะปรากฏเป็นประเภทข้อยกเว้น Python พื้นฐานแทนที่จะถูกห่อหุ้มด้วย PsdSaveException.
การจับ Exception จะจับประเภทสองนี้ด้วยหรือไม่?
ใช่ เนื่องจากทั้งสองสืบทอดมาจาก Exception — แต่การจับประเภทเฉพาะทำให้คุณแยกความล้มเหลวของการโหลดออกจากความล้มเหลวของการบันทึกได้.