ข้อยกเว้นหลัก
ข้อยกเว้นหลัก
Aspose.PSD FOSS สำหรับ Python กำหนดประเภทข้อยกเว้นสองประเภทที่เฉพาะเจาะจงต่อการจัดการ PSD/PSB: PsdLoadException, ซึ่งถูกยกขึ้นขณะพาร์สเอกสาร, และ PsdSaveException, ซึ่งถูกยกขึ้นขณะเขียนเอกสารหนึ่ง. ทั้งสองสืบทอดจาก Exception ที่มีมาในระบบและรับข้อความพร้อมกับ inner_exception ที่เป็นตัวเลือก.
การจับข้อผิดพลาดขณะโหลด
PsdLoadException ถูกยกขึ้นสำหรับหลายกรณีการตรวจสอบโครงสร้างขณะพาร์สเอกสาร:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
try:
image = PsdImage.load(input_path)
except PsdLoadException as ex:
print(f"Failed to load PSD/PSB file: {ex}")ข้อความทั่วไปรวมถึง "Invalid PSD signature. Expected '8BPS' (0x38425053)." (ไฟล์ไม่ได้เริ่มด้วยลายเซ็น PSD/PSB), "Unsupported PSD version: {n}. ..." (ฟิลด์เวอร์ชันไม่ใช่ PSD nor PSB), และ "{section} length {n} exceeds the enclosing section boundary." (ความยาวที่ระบุของส่วนไม่สอดคล้องกับขนาดจริงของไฟล์).
การจับข้อผิดพลาดขณะบันทึก
PsdSaveException มีจุดยกเดียวในการสร้าง FOSS นี้ — การตรวจสอบความยาวของสตริง Pascal:
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveException
try:
image.save(output_path)
except PsdSaveException as ex:
print(f"Failed to save PSD/PSB file: {ex}")ข้อความของมันคือ "PSD Pascal string length {n} exceeds the supported maximum 255." — ถูกสร้างขึ้นเมื่อชื่อเลเยอร์หรือทรัพยากรเกิน 255 ไบต์.
การตรวจสอบข้อยกเว้นภายใน
ทั้งสองประเภทของข้อยกเว้นรับอาร์กิวเมนต์ตัวสร้าง inner_exception ซึ่งจะถูกกำหนดค่าเมื่อความล้มเหลวของ I/O ภายในทำให้เกิดข้อยกเว้น:
try:
image = PsdImage.load(input_path)
except PsdLoadException as ex:
if ex.inner_exception is not None:
print(f"Underlying cause: {ex.inner_exception}")รูปแบบ NotSupportedException
ตัวกำหนดค่าคุณสมบัติบางส่วนในส่วนอื่นของ API ทำให้เกิด NotSupportedException แทนที่จะ PsdLoadException/PsdSaveException — สิ่งนี้บ่งชี้ว่าคุณสมบัตินั้นตั้งใจให้เป็นแบบอ่านอย่างเดียวในรุ่น FOSS นี้ ไม่ได้เป็นความล้มเหลวในการแยกวิเคราะห์หรือการเขียน ดู Resources and Layers สำหรับคุณสมบัติเฉพาะที่ได้รับผลกระทบ.
เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- ให้จับ
PsdLoadExceptionและPsdSaveExceptionอย่างเฉพาะเจาะจงแทนการใช้ฐานExceptionเมื่อคุณต้องการแยกความล้มเหลวในการโหลดออกจากความล้มเหลวในการบันทึก. ArgumentNullException(ถูกสร้างขึ้นเมื่อPsdImage.loadถูกเรียกด้วยสตรีมNone) และNotSupportedExceptionเป็นประเภทข้อยกเว้นที่แยกจากกัน — ไม่ใช่รูปแบบย่อยของPsdLoadException/PsdSaveException.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
PsdLoadException เกี่ยวกับเวอร์ชันที่ไม่รองรับ | ฟิลด์เวอร์ชันของไฟล์ไม่ใช่ค่ามาตรฐานของ PSD หรือ PSB | ยืนยันว่าไฟล์เป็นเอกสาร PSD/PSB ที่แท้จริงและไม่เสียหาย |
PsdSaveException เกี่ยวกับความยาวของสตริง Pascal | ชื่อเลเยอร์หรือทรัพยากรเกิน 255 ไบต์ | ทำให้ค่าสั้นลงก่อนบันทึก |
FAQ
PsdLoadException และ PsdSaveException มีประเภทข้อยกเว้นพื้นฐานร่วมกันหรือไม่?
ไม่ — ทั้งสองสืบทอดโดยตรงจาก Exception ที่มาพร้อมในระบบ ไม่ได้จากกันและกันหรือคลาสข้อยกเว้นพื้นฐานร่วม Aspose.PSD.
การดักจับ Exception จะดักจับประเภททั้งสองนี้ด้วยหรือไม่?
ใช่, เนื่องจากทั้งสองสืบทอดจาก Exception — แต่การดักจับประเภทเฉพาะจะทำให้คุณแยกความล้มเหลวในการโหลดออกจากการบันทึกได้.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
PsdLoadException(message, inner_exception=None) | เกิดขึ้นระหว่างการแยกวิเคราะห์เอกสาร |
PsdSaveException(message, inner_exception=None) | เกิดขึ้นระหว่างการเขียนเอกสาร |
NotSupportedException(message, inner_exception=None) | เกิดขึ้นโดยตัวตั้งค่า read-only-in-this-FOSS-build |