Υπηρεσία ScriptForge.Exception

Η υπηρεσία Exception (εξαίρεση) είναι μια συλλογή μεθόδων που βοηθούν στην αποσφαλμάτωση κώδικα σε σενάρια Basic και Python και στον χειρισμό σφαλμάτων στα σενάρια Basic.

Στα Basic scripts (σενάρια Basic), όταν παρουσιάζεται ένα σφάλμα χρόνου εκτέλεσης, οι μέθοδοι και οι ιδιότητες της υπηρεσίαςException> βοηθούν στον εντοπισμό του περιβάλλοντος του σφάλματος και επιτρέπουν τον χειρισμό του.

tip

Τα σφάλματα και οι προειδοποιήσεις που εμφανίζονται με την υπηρεσία Exception αποθηκεύονται στη μνήμη και μπορούν να ανακτηθούν χρησιμοποιώντας τη μέθοδο Console.


Η κονσόλα υπηρεσιών Exception (Εξαίρεση) αποθηκεύει συμβάντα, τιμές μεταβλητών και πληροφορίες σχετικά με σφάλματα. Χρησιμοποιήστε την κονσόλα όταν το IDE του Basic δεν είναι εύκολα προσβάσιμο, για παράδειγμα στον Υπολογισμός συναρτήσεων καθορισμένων από το χρήστη (UDF) ή κατά την επεξεργασία συμβάντων.

Χρησιμοποιήστε τη μέθοδο DebugPrint για να προσθέσετε τυχόν σχετικές πληροφορίες στην κονσόλα. Οι καταχωρήσεις της κονσόλας μπορούν να απορριφθούν σε ένα αρχείο κειμένου ή να απεικονιστούν σε ένα παράθυρο διαλόγου.

Όταν παρουσιάζεται σφάλμα, μια μακροεντολή εφαρμογής μπορεί:

  1. Αναφορά του σφάλματος στην κονσόλα Exception

  2. Πληροφόρηση του χρήστη σχετικά με το σφάλμα χρησιμοποιώντας είτε ένα τυπικό μήνυμα είτε ένα προσαρμοσμένο μήνυμα

  3. Προαιρετικά σταματήστε την εκτέλεσή του

Στα Python scripts (σενάρια Python) η υπηρεσία Exception (Εξαίρεση) χρησιμοποιείται κυρίως για σκοπούς εντοπισμού σφαλμάτων. Μέθοδοι όπως DebugPrint, Console και DebugDisplay είναι χρήσιμες για τη γρήγορη εκτύπωση μηνυμάτων, την καταγραφή δεδομένων και το άνοιγμα του παραθύρου της κονσόλας μέσα από ένα σενάριο Python.

note

Δεν είναι όλες οι μέθοδοι και οι ιδιότητες διαθέσιμες για σενάρια Python, καθώς η γλώσσα Python διαθέτει ήδη ένα ολοκληρωμένο σύστημα χειρισμού εξαιρέσεων.


Κλήση υπηρεσίας

Σε Basic

Τα ακόλουθα παραδείγματα δείχνουν τρεις διαφορετικές προσεγγίσεις για να καλέσετε τη μέθοδο Raise (ενεργοποίηση). Όλες οι άλλες μέθοδοι μπορούν να εκτελεστούν με παρόμοιο τρόπο.


    SF_Exception.Raise(...)
  

    Dim exc : exc = SF_Exception
    exc.Raise(...)
  

    Dim exc : exc = CreateScriptService("Exception")
    exc.Raise(...)
  
Σε Python

Το παρακάτω απόσπασμα κώδικα δημιουργεί μια παρουσία της υπηρεσίας 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.


tip

Η επίλυση ή η εκκαθάριση μιας Exception (Εξαίρεσης)επαναφέρει τις ιδιότητές της.


note

Η περιοχή κωδικών σφαλμάτων 0-2000 έχει κρατηθεί για το LibreOffice Basic. Τα σφάλματα του χρήστη μπορεί να ξεκινούν από υψηλότερες τιμές για να αποτρέψουν σύγκρουση με τις μελλοντικές αναπτύξεις του LibreOffice Basic.


Κατάλογος μεθόδων στην υπηρεσία εξαίρεσης

Clear
Console
ConsoleClear
ConsoleToFile

DebugDisplay
DebugPrint
PythonPrint

PythonShell
Raise
RaiseWarning


Clear

Επαναφέρει την τρέχουσα κατάσταση σφάλματος και διαγράφει τις ιδιότητες SF_Exception.

note

Αυτή η μέθοδος είναι διαθέσιμη μόνο για σενάρια Basic.


Σύνταξη:


    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
  
tip

Για έναν πλήρη κατάλογο με τους κωδικούς σφαλμάτων χρόνου εκτέλεσης της Basic, ανατρέξτε στην ενότητα Αποσφαλμάτωση προγράμματος Basic.


Console

Εμφανίζει τα μηνύματα της κονσόλας σε ένα διάλογο αναγκαστικό ή μη αναγκαστικό. Και στις δύο λειτουργίες, εμφανίζονται όλα τα προηγούμενα μηνύματα που εκδόθηκαν από μια μέθοδο DebugPrint() ή προκύπτουν από μια εξαίρεση. Σε μη αναγκαστική κατάσταση, οι επόμενες καταχωρήσεις προστίθενται αυτόματα.

Εάν η κονσόλα είναι ήδη ανοιχτή, όταν δεν είναι αναγκαστική, φέρεται στο μπροστινό μέρος.

Μια αναγκαστική κονσόλα μπορεί να κλείσει μόνο από τον χρήστη. Μια μη αναγκαστική κονσόλα μπορεί είτε να κλείσει από τον χρήστη, είτε κατά τον τερματισμό της μακροεντολής.

Σύνταξη:

exc.Console(modal: bool = True)

Παράμετροι:

modal (αναγκαστικό): Προσδιορίζει εάν το παράθυρο της κονσόλας είναι αναγκαστικό (True) ή μη αναγκαστικό (False). Η προεπιλεγμένη τιμή είναι True.

Παράδειγμα:

Σε Basic

        SF_Exception.Console(Modal := False)
  
Σε Python

    exc.Console(modal = False)
  

ConsoleClear

Διαγράφει την κονσόλα διατηρώντας έναν προαιρετικό αριθμό πρόσφατων μηνυμάτων. Εάν η κονσόλα είναι ενεργοποιημένη σε λειτουργία μη αναγκαστική, ανανεώνεται.

Σύνταξη:

exc.ConsoleClear(keep: int = 0)

Παράμετροι:

keep (διατήρηση): Ο αριθμός των πρόσφατων μηνυμάτων που θα διατηρηθούν. Η προεπιλεγμένη τιμή είναι 0.

Παράδειγμα:

Το ακόλουθο παράδειγμα διαγράφει την κονσόλα διατηρώντας τα 10 πιο πρόσφατα μηνύματα.

Σε Basic

        SF_Exception.ConsoleClear(10)
  
Σε Python

    exc.ConsoleClear(10)
  

ConsoleToFile

Εξάγει τα περιεχόμενα της κονσόλας σε αρχείο κειμένου. Εάν το αρχείο υπάρχει ήδη και η κονσόλα δεν είναι κενή, θα αντικατασταθεί χωρίς προειδοποίηση. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:

exc.ConsoleToFile(filename: str): bool

Παράμετροι:

filename: Το όνομα του αρχείου κειμένου στο οποίο πρέπει να τοποθετηθεί το περιεχόμενο της κονσόλας. Το όνομα εκφράζεται σύμφωνα με την τρέχουσα ιδιότητα FileNaming της υπηρεσίας SF_FileSystem. Από προεπιλογή, η Σημειογραφία της διεύθυνσης URL και η μορφή του εγγενούς λειτουργικού συστήματος γίνονται δεκτά.

Παράδειγμα:

Σε Basic

        SF_Exception.ConsoleToFile("C:\Documents\myFile.txt")
  
Σε Python

    exc.ConsoleToFile(r"C:\Documents\myFile.txt")
  

DebugDisplay

Συνενώνει όλα τα ορίσματα σε μια ενιαία συμβολοσειρά αναγνώσιμη από τον άνθρωπο και την εμφανίζει σε ένα MsgBox με ένα εικονίδιο πληροφοριών και ένα πλήκτρο ΟΚ.

Η τελική συμβολοσειρά προστίθεται επίσης στην κονσόλα.

Σύνταξη:

exc.DebugDisplay(arg0: any, [arg1: any, ...])

Παράμετροι:

arg0[, arg1, ...]: Οποιοσδήποτε αριθμός ορισμάτων οποιουδήποτε τύπου.

Παράδειγμα:

Σε Basic

    SF_Exception.DebugDisplay("Current Value", someVar)
  
Σε Python

    exc.DebugDisplay("Current Value", someVar)
  

DebugPrint

Συγκεντρώνει όλα τα δεδομένα ορισμάτων σε μια ενιαία συμβολοσειρά αναγνώσιμη από τον άνθρωπο και την προσθέτει ως νέα καταχώρηση στην κονσόλα.

Σύνταξη:

exc.DebugPrint(arg0: any, [arg1: any, ...])

Παράμετροι:

arg0[, arg1, ...]: Οποιοσδήποτε αριθμός ορισμάτων οποιουδήποτε τύπου.

Παράδειγμα:

Σε Basic

    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
  
Σε Python

    exc.DebugPrint(None, [1, 2, 3], "line1\nline2")
    # None  [1, 2, 3]  line1\nline2
  

PythonPrint

Εμφανίζει τον κατάλογο των ορισμάτων σε αναγνώσιμη μορφή στην κονσόλα της πλατφόρμας. Τα ορίσματα διαχωρίζονται με έναν χαρακτήρα TAB (προσομοιωμένο με κενά).

Η ίδια συμβολοσειρά προστίθεται στην κονσόλα αποσφαλμάτωσης ScriptForge.

Εάν το Python shell (APSO) είναι ενεργό, το περιεχόμενο του PythonPrint εγγράφεται στην κονσόλα APSO στη θέση της κονσόλας της πλατφόρμας.

note

Αυτή η μέθοδος είναι διαθέσιμη μόνο για σενάρια Basic.


Σύνταξη:


  exc.PythonPrint(arg0: any, [arg1: any, ...])
  

Παράμετροι:

arg0[, arg1, ...]: Οποιοσδήποτε αριθμός ορισμάτων οποιουδήποτε τύπου. Το μέγιστο μήκος κάθε μεμονωμένου ορίσματος είναι 1024 χαρακτήρες.

Παράδειγμα:


    exc.PythonPrint(a, Array(1, 2, 3), , "line1" & Chr(10) & "Line2", DateSerial(2020, 04, 09))
  
note

Στην Python χρησιμοποιήστε μια πρόταση print για να εκτυπώσετε στην κονσόλα APSO ή χρησιμοποιήστε τη μέθοδο DebugPrint για να εκτυπώσετε στην κονσόλα του ScriptForge.


PythonShell

Ανοίγει ένα κέλυφος APSO της Python ως μη αναγκαστικό παράθυρο. Το σενάριο Python συνεχίζει να εκτελείται μετά το άνοιγμα του κελύφους. Τα αποτελέσματα από τις προτάσεις print μέσα στο σενάριο εμφανίζονται στο κέλυφος.

Μόνο μία παρουσία του κελύφους APSO της Python μπορεί να ανοίξει ανά πάσα στιγμή. Επομένως, εάν ένα κέλυφος Python είναι ήδη ανοιχτό, τότε η κλήση αυτής της μεθόδου δεν θα έχει κανένα αποτέλεσμα.

warning

Αυτή η μέθοδος απαιτεί την εγκατάσταση του APSO (Οργανωτής εναλλακτικού σεναρίου Python). Με τη σειρά του το APSO απαιτεί την παρουσία του πλαισίου δέσμης ενεργειών Python του LibreOffice. Εάν λείπουν APSO ή Python, παρουσιάζεται σφάλμα.


Σύνταξη:

exc.PythonShell(variables: dict)

Παράμετροι:

variables (μεταβλητές): ένα λεξικό Python με ονόματα και τιμές μεταβλητών που θα μεταβιβαστούν στο κέλυφος APSO τηςPython. Από προεπιλογή, όλες οι τοπικές μεταβλητές περνούν χρησιμοποιώντας την ενσωματωμένη συνάρτηση locals() της Python.

Παράδειγμα:

Το παρακάτω παράδειγμα ανοίγει το κέλυφος APSO της Python μεταβιβάζοντας όλες τις καθολικές και τοπικές μεταβλητές λαμβάνοντας υπόψη το περιβάλλον όπου εκτελείται το σενάριο.


    exc.PythonShell({**globals(), **locals()})
  

Όταν το κέλυφος APSO της Python είναι ανοιχτό, οποιαδήποτε επόμενη έξοδος που εκτυπώνεται από το σενάριο θα εμφανίζεται στο κέλυφος. Ως εκ τούτου, η συμβολοσειρά που τυπώνεται στο παρακάτω παράδειγμα θα εμφανίζεται στο κέλυφος της Python.


    exc.PythonShell()
    print("Γειά σου, κόσμε!")
  

Raise

Δημιουργεί ένα σφάλμα χρόνου εκτέλεσης. Εμφανίζεται ένα μήνυμα σφάλματος στον χρήστη και αναφέρεται στην κονσόλα. Η εκτέλεση διακόπτεται. Η μέθοδος Raise() μπορεί να τοποθετηθεί εντός της κανονικής ροής σεναρίου ή σε μια αποκλειστική ρουτίνα χειρισμού σφαλμάτων.

note

Αυτή η μέθοδος είναι διαθέσιμη μόνο για σενάρια Basic.


Σύνταξη:


    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.

note

Η περιοχή κωδικών σφαλμάτων 0-2000 έχει κρατηθεί για το LibreOffice Basic. Τα σφάλματα του χρήστη μπορεί να ξεκινούν από υψηλότερες τιμές για να αποτρέψουν σύγκρουση με τις μελλοντικές αναπτύξεις του LibreOffice Basic.


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()", "Συνέβη κάτι λάθος!")
  

RaiseWarning

Αυτή η μέθοδος έχει ακριβώς την ίδια σύνταξη, ορίσματα και συμπεριφορά με τη μέθοδο Raise().

Ωστόσο, όταν εμφανίζεται μια προειδοποίηση, η εκτέλεση της μακροεντολής δεν διακόπτεται.

note

Αυτή η μέθοδος είναι διαθέσιμη μόνο για σενάρια Basic.


Σύνταξη:


    SF_Exception.RaiseWarning([Number As Variant], [Source As Variant], [Description As String])
  

Παράμετροι:

Number (Αριθμός): Ο κωδικός σφάλματος, ως αριθμός ή ως συμβολοσειρά. Η προεπιλεγμένη τιμή είναι αυτή της ενσωματωμένης συνάρτησης της Basic Err.

note

Η περιοχή κωδικών σφαλμάτων 0-2000 έχει κρατηθεί για το LibreOffice Basic. Τα σφάλματα του χρήστη μπορεί να ξεκινούν από υψηλότερες τιμές για να αποτρέψουν σύγκρουση με τις μελλοντικές αναπτύξεις του LibreOffice Basic.


Source (Προέλευση): Η θέση του σφάλματος, ως αριθμός ή ως συμβολοσειρά. Η προεπιλεγμένη τιμή είναι αυτή της ενσωματωμένης συνάρτησης της Basic Erl.

Description (Περιγραφή): Το μήνυμα που εμφανίζεται στον χρήστη και για αναφορά στην κονσόλα. Η προεπιλεγμένη τιμή είναι αυτή της Error$ της ενσωματωμένης συνάρτησης της Basic.

Παράδειγμα:


    SF_Exception.RaiseWarning(Source:="Example_Raise()", _
        Description:="Something wrong happened !", _
        Number:="MyAppError")
  

Παρακαλούμε, υποστηρίξτε μας!