วิธีจัดการข้อยกเว้น PSD Core ใน Python

วิธีจัดการข้อยกเว้น 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 — แต่การจับประเภทเฉพาะทำให้คุณแยกความล้มเหลวของการโหลดออกจากความล้มเหลวของการบันทึกได้.

ดูเพิ่มเติม

 ภาษาไทย