Πώς να διαχειριστείτε εξαιρέσεις πυρήνα PSD στο Python

Πώς να διαχειριστείτε εξαιρέσεις πυρήνα PSD στο 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 string του PSD (255 bytes):

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 bytes, το μέγιστο που μπορεί να κωδικοποιήσει ένα πεδίο Pascal string του PSD. Συντομεύστε την τιμή πριν από την αποθήκευση.

Συχνές Ερωτήσεις

Μοιράζονται τα PsdLoadException και PsdSaveException έναν κοινό βασικό τύπο εξαίρεσης;

Όχι — και τα δύο κληρονομούν άμεσα από το ενσωματωμένο Exception, όχι το ένα από το άλλο ή από μια κοινή Aspose.PSD βασική κλάση εξαιρέσεων.

Μπορεί το PsdSaveException να συμβεί για λόγους διαφορετικούς από μια μακριά τιμή συμβολοσειράς;

Η επιβεβαιωμένη τοποθεσία που προκαλεί την εξαίρεση σε αυτήν τη FOSS έκδοση είναι ο έλεγχος του μήκους της Pascal-string. Άλλες αποτυχίες I/O κατά την αποθήκευση (π.χ., μια ροή προορισμού που δεν μπορεί να γραφτεί) εμφανίζονται ως ο υποκείμενος τύπος εξαίρεσης Python αντί να τυλίγονται σε PsdSaveException.

Θα πιάσει η σύλληψη του Exception επίσης αυτούς τους δύο τύπους;

Ναι, επειδή και τα δύο προέρχονται από Exception — αλλά η σύλληψη των συγκεκριμένων τύπων σας επιτρέπει να διακρίνετε αποτυχίες φόρτωσης από αποτυχίες αποθήκευσης.

Δείτε επίσης

 Ελληνικά