Cách xử lý các ngoại lệ PSD Core trong Python

Cách xử lý các ngoại lệ PSD Core trong Python

Aspose.PSD FOSS cho Python định nghĩa hai loại ngoại lệ: PsdLoadException, được ném khi phân tích một tài liệu PSD/PSB, và PsdSaveException, được ném khi ghi một tài liệu. Cả hai 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 ngoại lệ nội bộ tùy chọn.

Hướng dẫn từng bước

Bước 1: Cài đặt gói

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

Bước 2: Nhập các lớp cần thiết

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
from aspose_psd_foss.coreexceptions.psdsaveexception import PsdSaveException

Bước 3: Bắt các lỗi thời gian tải

PsdLoadException được ném ra khi cấu trúc của tài liệu không vượt qua được việc xác thực — ví dụ, phiên bản PSD/PSB không được hỗ trợ, độ dài phần vượt quá giới hạn đã khai báo của phần bao quanh, hoặc dữ liệu luồng bị cắt ngắn:

try:
    image = PsdImage.load("input.psd")
except PsdLoadException as ex:
    print(f"Failed to load PSD/PSB file: {ex}")

Bước 4: Bắt các lỗi khi lưu

PsdSaveException được ném ra trong quá trình ghi tài liệu — ví dụ, khi một giá trị chuỗi vượt quá độ dài trường chuỗi Pascal PSD có thể chứa (255 byte):

try:
    image.save("output.psd")
except PsdSaveException as ex:
    print(f"Failed to save PSD/PSB file: {ex}")

Bước 5: Kiểm tra ngoại lệ bên trong

Cả hai kiểu ngoại lệ đều chấp nhận một đối số khởi tạo inner_exception (được sử dụng nội bộ, ví dụ, khi lỗi I/O làm gián đoạn việc đọc cấu trúc tệp). Kiểm tra inner_exception để tìm nguyên nhân gốc:

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}")

Các vấn đề thường gặp và cách khắc phục

PsdLoadException với một thông báo về phiên bản không được hỗ trợ. Trường phiên bản PSD được khai báo trong tệp không phải là giá trị PSD tiêu chuẩn cũng không phải giá trị PSB cho tài liệu lớn. Xác nhận rằng tệp là tài liệu PSD/PSB thật sự, không bị hỏng.

PsdLoadException với một thông báo về độ dài phần vượt quá giới hạn. Các trường độ dài nội bộ của tệp không khớp với kích thước thực tế — điều này thường cho thấy tệp bị cắt ngắn hoặc hỏng hơn là một biến thể không được hỗ trợ.

PsdSaveException về độ dài chuỗi Pascal. Giá trị chuỗi (chẳng hạn như tên lớp hoặc tên tài nguyên) vượt quá 255 byte, giới hạn tối đa mà trường chuỗi Pascal của PSD có thể mã hoá. Hãy rút ngắn giá trị trước khi lưu.

Câu hỏi thường gặp

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 sẵn, không phải từ nhau hoặc một lớp ngoại lệ cơ sở chung Aspose.PSD.

Liệu PsdSaveException có thể xảy ra vì các nguyên nhân khác ngoài giá trị chuỗi dài không?

Vị trí raise đã được xác nhận trong bản dựng FOSS này là kiểm tra độ dài chuỗi Pascal. Các lỗi I/O khác khi lưu (ví dụ, luồng đích không thể ghi) xuất hiện dưới dạng loại ngoại lệ Python cơ bản thay vì được bao bọc trong PsdSaveException.

Việc bắt Exception có cũng bắt được hai kiểu này không?

Vâng, vì cả hai đều kế thừa từ Exception — nhưng việc bắt các loại cụ thể cho phép bạn phân biệt lỗi tải với lỗi lưu.

Xem thêm

 Tiếng Việt