Python에서 PSD Core 예외를 처리하는 방법

Python에서 PSD Core 예외를 처리하는 방법

Aspose.PSD FOSS for 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}")

Step 4: 저장 시점 오류 포착

PsdSaveException은(는) 문서를 쓰는 중에 발생합니다 — 예를 들어 문자열 값이 PSD Pascal 문자열 필드가 저장할 수 있는 길이(255바이트)를 초과할 때:

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

Step 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바이트를 초과했습니다. 이는 PSD Pascal 문자열 필드가 인코딩할 수 있는 최대값입니다. 저장하기 전에 값을 줄이십시오.

자주 묻는 질문

PsdLoadException와 PsdSaveException이 공통 기본 예외 타입을 공유합니까?

아니요 — 두 예외 모두 내장된 Exception에서 직접 파생되며, 서로 혹은 공통 Aspose.PSD 기반 예외 클래스에서 파생되지 않습니다.

PsdSaveException가 긴 문자열 값 이외의 이유로 발생할 수 있습니까?

이 FOSS 빌드에서 확인된 발생 지점은 Pascal 문자열 길이 검사입니다. 다른 저장 시 I/O 실패(예: 쓸 수 없는 대상 스트림)들은 PsdSaveException로 래핑되지 않고 기본 Python 예외 유형으로 나타납니다.

Exception를 잡으면 이 두 유형도 잡히게 됩니까?

예, 두 경우 모두 Exception에서 파생되지만 — 특정 유형을 포착하면 로드 실패와 저장 실패를 구분할 수 있습니다.

참조

 한국어