Các ngoại lệ cốt lõi
Các ngoại lệ cốt lõi
Aspose.PSD FOSS cho Python định nghĩa hai loại ngoại lệ đặc thù cho việc xử lý PSD/PSB: PsdLoadException, được ném khi phân tích một tài liệu, và PsdSaveException, được ném khi ghi một tài liệu. Cả hai đều kế thừa từ Exception tích hợp và chấp nhận một thông điệp cộng với một inner_exception tùy chọn.
Bắt các lỗi thời gian tải
PsdLoadException được ném cho một số lỗi xác thực cấu trúc khi phân tích một tài liệu:
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}")Các thông điệp phổ biến bao gồm "Invalid PSD signature. Expected '8BPS' (0x38425053)." (tệp không bắt đầu bằng chữ ký PSD/PSB), "Unsupported PSD version: {n}. ..." (trường phiên bản không phải là PSD cũng không phải là PSB), và "{section} length {n} exceeds the enclosing section boundary." (độ dài đã khai báo của một phần không khớp với kích thước thực tế của tệp).
Bắt các lỗi thời gian lưu
PsdSaveException có một vị trí ném duy nhất trong bản dựng FOSS này — một kiểm tra độ dài chuỗi 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}")Thông báo của nó là "PSD Pascal string length {n} exceeds the supported maximum 255." — được ném khi tên lớp hoặc tài nguyên vượt quá 255 byte.
Kiểm tra Ngoại lệ Nội bộ
Cả hai loại ngoại lệ đều chấp nhận đối số khởi tạo inner_exception, được điền khi một lỗi I/O nền gây ra ngoại lệ:
try:
image = PsdImage.load(input_path)
except PsdLoadException as ex:
if ex.inner_exception is not None:
print(f"Underlying cause: {ex.inner_exception}")Mẫu NotSupportedException
Một số bộ đặt thuộc tính ở các nơi khác trong API gây ra NotSupportedException thay vì PsdLoadException/PsdSaveException — điều này cho thấy một thuộc tính được cố ý đặt ở chế độ chỉ đọc trong bản dựng FOSS này, không phải là lỗi phân tích hoặc ghi. Xem Resources and Layers đối với các thuộc tính cụ thể bị ảnh hưởng.
Mẹo và Thực tiễn Tốt nhất
- Bắt
PsdLoadExceptionvàPsdSaveExceptionmột cách cụ thể thay vìExceptioncơ bản khi bạn cần phân biệt lỗi tải và lỗi lưu. ArgumentNullException(được ném khiPsdImage.loadđược gọi với một luồngNone) vàNotSupportedExceptionlà các loại ngoại lệ riêng biệt — không phải là biến thể củaPsdLoadException/PsdSaveException.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Khắc phục |
|---|---|---|
PsdLoadException về một phiên bản không được hỗ trợ | Trường phiên bản của tệp không phải là giá trị chuẩn PSD hoặc PSB | Xác nhận tệp là tài liệu PSD/PSB gốc, không bị hỏng |
PsdSaveException về độ dài chuỗi Pascal | Tên layer hoặc tài nguyên vượt quá 255 byte | Rút ngắn giá trị trước khi lưu |
FAQ
Liệu PsdLoadException và PsdSaveException có chia sẻ một kiểu ngoại lệ cơ sở chung không?
Không — cả hai đều kế thừa trực tiếp từ Exception tích hợp, không phải từ nhau hoặc một lớp ngoại lệ cơ sở Aspose.PSD chung.
Việc bắt Exception có cũng bắt cả hai kiểu này không?
Có, vì cả hai đều kế thừa từ Exception — nhưng bắt các kiểu cụ thể cho phép bạn phân biệt lỗi tải và lỗi lưu.
API Reference Tóm tắt
| Lớp/Phương thức | Mô tả |
|---|---|
PsdLoadException(message, inner_exception=None) | Phát sinh trong quá trình phân tích tài liệu |
PsdSaveException(message, inner_exception=None) | Phát sinh trong quá trình viết tài liệu |
NotSupportedException(message, inner_exception=None) | Được sinh ra bởi các setter read-only-in-this-FOSS-build |