LibreOffice 24.8 Βοήθεια
Η υπηρεσία Exception (εξαίρεση) είναι μια συλλογή μεθόδων που βοηθούν στην αποσφαλμάτωση κώδικα σε σενάρια Basic και Python και στον χειρισμό σφαλμάτων στα σενάρια Basic.
Στα Basic scripts (σενάρια Basic), όταν παρουσιάζεται ένα σφάλμα χρόνου εκτέλεσης, οι μέθοδοι και οι ιδιότητες της υπηρεσίαςException> βοηθούν στον εντοπισμό του περιβάλλοντος του σφάλματος και επιτρέπουν τον χειρισμό του.
Η υπηρεσία SF_Exception είναι παρόμοια με το αντικείμενο VBA Err(Σφάλμα).
Η ιδιότητα Number (αριθμός) προσδιορίζει το σφάλμα.
Χρησιμοποιήστε τη μέθοδο Raise για να διακόψετε την επεξεργασία. Η μέθοδος RaiseWarning μπορεί να χρησιμοποιηθεί για την παγίδευση μιας ανωμαλίας χωρίς να διακοπεί η εκτέλεση της μακροεντολής.
Τα σφάλματα και οι προειδοποιήσεις που εμφανίζονται με την υπηρεσία Exception αποθηκεύονται στη μνήμη και μπορούν να ανακτηθούν χρησιμοποιώντας τη μέθοδο Console.
Η κονσόλα υπηρεσιών Exception (Εξαίρεση) αποθηκεύει συμβάντα, τιμές μεταβλητών και πληροφορίες σχετικά με σφάλματα. Χρησιμοποιήστε την κονσόλα όταν το IDE του Basic δεν είναι εύκολα προσβάσιμο, για παράδειγμα στον Υπολογισμός συναρτήσεων καθορισμένων από το χρήστη (UDF) ή κατά την επεξεργασία συμβάντων.
Χρησιμοποιήστε τη μέθοδο DebugPrint για να προσθέσετε τυχόν σχετικές πληροφορίες στην κονσόλα. Οι καταχωρήσεις της κονσόλας μπορούν να απορριφθούν σε ένα αρχείο κειμένου ή να απεικονιστούν σε ένα παράθυρο διαλόγου.
Όταν παρουσιάζεται σφάλμα, μια μακροεντολή εφαρμογής μπορεί:
Αναφορά του σφάλματος στην κονσόλα Exception
Πληροφόρηση του χρήστη σχετικά με το σφάλμα χρησιμοποιώντας είτε ένα τυπικό μήνυμα είτε ένα προσαρμοσμένο μήνυμα
Προαιρετικά σταματήστε την εκτέλεσή του
Στα Python scripts (σενάρια Python) η υπηρεσία Exception (Εξαίρεση) χρησιμοποιείται κυρίως για σκοπούς εντοπισμού σφαλμάτων. Μέθοδοι όπως DebugPrint, Console και DebugDisplay είναι χρήσιμες για τη γρήγορη εκτύπωση μηνυμάτων, την καταγραφή δεδομένων και το άνοιγμα του παραθύρου της κονσόλας μέσα από ένα σενάριο Python.
Δεν είναι όλες οι μέθοδοι και οι ιδιότητες διαθέσιμες για σενάρια Python, καθώς η γλώσσα Python διαθέτει ήδη ένα ολοκληρωμένο σύστημα χειρισμού εξαιρέσεων.
Τα ακόλουθα παραδείγματα δείχνουν τρεις διαφορετικές προσεγγίσεις για να καλέσετε τη μέθοδο Raise (ενεργοποίηση). Όλες οι άλλες μέθοδοι μπορούν να εκτελεστούν με παρόμοιο τρόπο.
    SF_Exception.Raise(...)
  
    Dim exc : exc = SF_Exception
    exc.Raise(...)
  
    Dim exc : exc = CreateScriptService("Exception")
    exc.Raise(...)
  Το παρακάτω απόσπασμα κώδικα δημιουργεί μια παρουσία της υπηρεσίας Exception (Εξαίρεση), καταγράφει ένα μήνυμα και εμφανίζει το παράθυρο Κονσόλα.
    from scriptforge import CreateScriptService
    exc = CreateScriptService("Exception")
    someVar = 100
    exc.DebugPrint("Value of someVar", someVar)
    exc.Console()
  Οι ιδιότητες που αναφέρονται παρακάτω είναι διαθέσιμες μόνο για σενάρια Basic.
| Όνομα | Μόνο για ανάγνωση | Περιγραφή | 
|---|---|---|
| Description | Όχι | Το κείμενο του μηνύματος σφάλματος. Η προεπιλεγμένη τιμή είναι "" ή μια συμβολοσειρά που περιέχει το μήνυμα σφάλματος χρόνου εκτέλεσης Basic. | 
| Number | Όχι | Ο κωδικός του σφάλματος. Μπορεί να είναι μια αριθμητική τιμή ή κείμενο. Η προεπιλεγμένη τιμή είναι 0 ή η αριθμητική τιμή που αντιστοιχεί στον κωδικό σφάλματος χρόνου εκτέλεσης της Basic. | 
| Source | Όχι | Η θέση στον κώδικα όπου παρουσιάστηκε το σφάλμα. Μπορεί να είναι μια αριθμητική τιμή ή κείμενο. Η προεπιλεγμένη τιμή είναι 0 ή ο αριθμός γραμμής κώδικα για ένα τυπικό σφάλμα χρόνου εκτέλεσης της Basic. | 
Η επίλυση ή η εκκαθάριση μιας Exception (Εξαίρεσης)επαναφέρει τις ιδιότητές της.
| Κατάλογος μεθόδων στην υπηρεσία εξαίρεσης | ||
|---|---|---|
Επαναφέρει την τρέχουσα κατάσταση σφάλματος και διαγράφει τις ιδιότητες SF_Exception.
    SF_Exception.Clear()
  Το παρακάτω παράδειγμα δείχνει πώς μπορείτε να συλλάβετε μια εξαίρεση διαίρεσης με μηδέν, της οποίας ο κωδικός σφάλματος είναι 11.
    Sub Example_Clear()
        Dim a, b, c
        On Local Error GoTo Catch
        Try:
            a = 10 : b = 0
            c = a / b
            '...
            Exit Sub
        Catch:
            If SF_Exception.Number = 11 Then SF_Exception.Clear()
            ' Εάν διαίρεση είναι με το μηδέν, αγνοήστε το σφάλμα
    End Sub
  Για έναν πλήρη κατάλογο με τους κωδικούς σφαλμάτων χρόνου εκτέλεσης της Basic, ανατρέξτε στην ενότητα Αποσφαλμάτωση προγράμματος Basic.
Εμφανίζει τα μηνύματα της κονσόλας σε ένα διάλογο αναγκαστικό ή μη αναγκαστικό. Και στις δύο λειτουργίες, εμφανίζονται όλα τα προηγούμενα μηνύματα που εκδόθηκαν από μια μέθοδο DebugPrint() ή προκύπτουν από μια εξαίρεση. Σε μη αναγκαστική κατάσταση, οι επόμενες καταχωρήσεις προστίθενται αυτόματα.
Εάν η κονσόλα είναι ήδη ανοιχτή, όταν δεν είναι αναγκαστική, φέρεται στο μπροστινό μέρος.
Μια αναγκαστική κονσόλα μπορεί να κλείσει μόνο από τον χρήστη. Μια μη αναγκαστική κονσόλα μπορεί είτε να κλείσει από τον χρήστη, είτε κατά τον τερματισμό της μακροεντολής.
exc.Console(modal: bool = True)
modal (αναγκαστικό): Προσδιορίζει εάν το παράθυρο της κονσόλας είναι αναγκαστικό (True) ή μη αναγκαστικό (False). Η προεπιλεγμένη τιμή είναι True.
        SF_Exception.Console(Modal := False)
  
    exc.Console(modal = False)
  Διαγράφει την κονσόλα διατηρώντας έναν προαιρετικό αριθμό πρόσφατων μηνυμάτων. Εάν η κονσόλα είναι ενεργοποιημένη σε λειτουργία μη αναγκαστική, ανανεώνεται.
exc.ConsoleClear(keep: int = 0)
keep (διατήρηση): Ο αριθμός των πρόσφατων μηνυμάτων που θα διατηρηθούν. Η προεπιλεγμένη τιμή είναι 0.
Το ακόλουθο παράδειγμα διαγράφει την κονσόλα διατηρώντας τα 10 πιο πρόσφατα μηνύματα.
        SF_Exception.ConsoleClear(10)
  
    exc.ConsoleClear(10)
  Εξάγει τα περιεχόμενα της κονσόλας σε αρχείο κειμένου. Εάν το αρχείο υπάρχει ήδη και η κονσόλα δεν είναι κενή, θα αντικατασταθεί χωρίς προειδοποίηση. Επιστρέφει True εάν είναι επιτυχής.
exc.ConsoleToFile(filename: str): bool
filename: Το όνομα του αρχείου κειμένου στο οποίο πρέπει να τοποθετηθεί το περιεχόμενο της κονσόλας. Το όνομα εκφράζεται σύμφωνα με την τρέχουσα ιδιότητα FileNaming της υπηρεσίας SF_FileSystem. Από προεπιλογή, η Σημειογραφία της διεύθυνσης URL και η μορφή του εγγενούς λειτουργικού συστήματος γίνονται δεκτά.
        SF_Exception.ConsoleToFile("C:\Documents\myFile.txt")
  
    exc.ConsoleToFile(r"C:\Documents\myFile.txt")
  Συνενώνει όλα τα ορίσματα σε μια ενιαία συμβολοσειρά αναγνώσιμη από τον άνθρωπο και την εμφανίζει σε ένα MsgBox με ένα εικονίδιο πληροφοριών και ένα πλήκτρο ΟΚ.
Η τελική συμβολοσειρά προστίθεται επίσης στην κονσόλα.
exc.DebugDisplay(arg0: any, [arg1: any, ...])
arg0[, arg1, ...]: Οποιοσδήποτε αριθμός ορισμάτων οποιουδήποτε τύπου.
    SF_Exception.DebugDisplay("Current Value", someVar)
  
    exc.DebugDisplay("Current Value", someVar)
  Συγκεντρώνει όλα τα δεδομένα ορισμάτων σε μια ενιαία συμβολοσειρά αναγνώσιμη από τον άνθρωπο και την προσθέτει ως νέα καταχώρηση στην κονσόλα.
exc.DebugPrint(arg0: any, [arg1: any, ...])
arg0[, arg1, ...]: Οποιοσδήποτε αριθμός ορισμάτων οποιουδήποτε τύπου.
    SF_Exception.DebugPrint(Null, Array(1, 2, 3), "line1" & Chr(10) & "Line2", DateSerial(2020, 04, 09))
    ' [NULL]   [ARRAY] (0:2) (1, 2, 3)  line1\nLine2  2020-04-09
  
    exc.DebugPrint(None, [1, 2, 3], "line1\nline2")
    # None  [1, 2, 3]  line1\nline2
  Εμφανίζει τον κατάλογο των ορισμάτων σε αναγνώσιμη μορφή στην κονσόλα της πλατφόρμας. Τα ορίσματα διαχωρίζονται με έναν χαρακτήρα TAB (προσομοιωμένο με κενά).
Η ίδια συμβολοσειρά προστίθεται στην κονσόλα αποσφαλμάτωσης ScriptForge.
Εάν το Python shell (APSO) είναι ενεργό, το περιεχόμενο του PythonPrint εγγράφεται στην κονσόλα APSO στη θέση της κονσόλας της πλατφόρμας.
  exc.PythonPrint(arg0: any, [arg1: any, ...])
  arg0[, arg1, ...]: Οποιοσδήποτε αριθμός ορισμάτων οποιουδήποτε τύπου. Το μέγιστο μήκος κάθε μεμονωμένου ορίσματος είναι 1024 χαρακτήρες.
    exc.PythonPrint(a, Array(1, 2, 3), , "line1" & Chr(10) & "Line2", DateSerial(2020, 04, 09))
  Στην Python χρησιμοποιήστε μια πρόταση print για να εκτυπώσετε στην κονσόλα APSO ή χρησιμοποιήστε τη μέθοδο DebugPrint για να εκτυπώσετε στην κονσόλα του ScriptForge.
Ανοίγει ένα κέλυφος APSO της Python ως μη αναγκαστικό παράθυρο. Το σενάριο Python συνεχίζει να εκτελείται μετά το άνοιγμα του κελύφους. Τα αποτελέσματα από τις προτάσεις print μέσα στο σενάριο εμφανίζονται στο κέλυφος.
Μόνο μία παρουσία του κελύφους APSO της Python μπορεί να ανοίξει ανά πάσα στιγμή. Επομένως, εάν ένα κέλυφος Python είναι ήδη ανοιχτό, τότε η κλήση αυτής της μεθόδου δεν θα έχει κανένα αποτέλεσμα.
exc.PythonShell(variables: dict)
variables (μεταβλητές): ένα λεξικό Python με ονόματα και τιμές μεταβλητών που θα μεταβιβαστούν στο κέλυφος APSO τηςPython. Από προεπιλογή, όλες οι τοπικές μεταβλητές περνούν χρησιμοποιώντας την ενσωματωμένη συνάρτηση locals() της Python.
Το παρακάτω παράδειγμα ανοίγει το κέλυφος APSO της Python μεταβιβάζοντας όλες τις καθολικές και τοπικές μεταβλητές λαμβάνοντας υπόψη το περιβάλλον όπου εκτελείται το σενάριο.
    exc.PythonShell({**globals(), **locals()})
  Όταν το κέλυφος APSO της Python είναι ανοιχτό, οποιαδήποτε επόμενη έξοδος που εκτυπώνεται από το σενάριο θα εμφανίζεται στο κέλυφος. Ως εκ τούτου, η συμβολοσειρά που τυπώνεται στο παρακάτω παράδειγμα θα εμφανίζεται στο κέλυφος της Python.
    exc.PythonShell()
    print("Γειά σου, κόσμε!")
  Δημιουργεί ένα σφάλμα χρόνου εκτέλεσης. Εμφανίζεται ένα μήνυμα σφάλματος στον χρήστη και αναφέρεται στην κονσόλα. Η εκτέλεση διακόπτεται. Η μέθοδος Raise() μπορεί να τοποθετηθεί εντός της κανονικής ροής σεναρίου ή σε μια αποκλειστική ρουτίνα χειρισμού σφαλμάτων.
    SF_Exception.Raise([Number As Variant], [Source As Variant], [Description As String])
  Τα αποσπάσματα κώδικα που παρουσιάζονται στη συνέχεια είναι ισοδύναμα. Δείχνουν εναλλακτικούς τρόπους δημιουργίας εξαίρεσης με τον κωδικό 2100.
    SF_Exception.Raise(2100)
  
    SF_Exception.Number = 2100
    SF_Exception.Raise()
  
    SF_Exception.Raise Number := 2100
  Number (Αριθμός): Ο κωδικός σφάλματος, ως αριθμός ή ως συμβολοσειρά. Η προεπιλεγμένη τιμή είναι αυτή της ενσωματωμένης συνάρτησης της Basic Err.
Source (Προέλευση): Η θέση του σφάλματος, ως αριθμός ή ως συμβολοσειρά. Η προεπιλεγμένη τιμή είναι αυτή της ενσωματωμένης συνάρτησης της Basic Erl.
Description (Περιγραφή): Το μήνυμα που εμφανίζεται στον χρήστη και για αναφορά στην κονσόλα. Η προεπιλεγμένη τιμή είναι αυτή της Error$ της ενσωματωμένης συνάρτησης της Basic.
    Sub Example_Raise()
        Dim a, b, c
        On Local Error GoTo Catch
        Try:
            a = 10 : b = 0
            c = a / b
            '...
            Exit Sub
        Catch:
            'Δείτε τις παρακάτω παραλλαγές...
    End Sub
  Για να δημιουργήσετε μια εξαίρεση με τις τυπικές τιμές:
    Catch:
        SF_Exception.Raise()
  Για να δημιουργήσετε μια εξαίρεση με έναν συγκεκριμένο κωδικό:
    Catch:
        SF_Exception.Raise(11)
  Για να αντικαταστήσετε το συνηθισμένο μήνυμα:
    Catch:
        SF_Exception.Raise(, , "Δεν είναι καλή ιδέα να διαιρέσουμε με το μηδέν.")
  Για να δημιουργήσετε ένα σφάλμα εφαρμογής:
    Catch:
        SF_Exception.Raise("MyAppError", "Example_Raise()", "Συνέβη κάτι λάθος!")
  Αυτή η μέθοδος έχει ακριβώς την ίδια σύνταξη, ορίσματα και συμπεριφορά με τη μέθοδο Raise().
Ωστόσο, όταν εμφανίζεται μια προειδοποίηση, η εκτέλεση της μακροεντολής δεν διακόπτεται.
    SF_Exception.RaiseWarning([Number As Variant], [Source As Variant], [Description As String])
  
    SF_Exception.RaiseWarning(Source:="Example_Raise()", _
        Description:="Something wrong happened !", _
        Number:="MyAppError")