Tjenesten ScriptForge.Exception (Undtagelse)

Tjenesten Exception (undtagelse) er en samling af metoder, der hjælper med at debugge koder i Basic- og Python-sceripts og med håndtering af fejl i Basic-scripts.

I Basic-scripts hj√¶lper tjenesten Exception (undtagelse) metoderne og egenskaberne med at identificere fejlens sammenh√¶ng og tillader h√•ndtering af den, n√•r der forekommer en k√łrselsfejl.

tip

Fejl og advarsel, der er markeret af tjenesten Exception (undtagelse) gemmes i hukommelsen og kan hentes med metoden Console (konsol).


Tjenestekonsolen Exception (undtagelse) gemmer begivenheder, variable værdier og oplysninger om fejl. Brug konsollen, når BASIC-IDE er er let tilgængelig, for eksempel i Calc user defined functions ((UDF) brugerdefinerede funktioner i Calc) eller under behandlingen af hændelser.

Brug metoden DebugPrint (Fejls√łg_udskrift) for at tilf√łje relevant information til konsollen. Konsolindf√łrsler kan tilf√łje enhver relevant information til konsollen. Konsolindf√łrsler kan dumpes til en tekstfil eller visualiseres i et dialogvindue.

Når der forekommer en fejl, kan en programmakro:

  1. Rapportere fejlen i konsollen Exception (Undtagelse)

  2. Informer brugeren om fejlen med enten en standard- eller en tilpasset besked

  3. Valgfrit stoppe dens udf√łrelse

I Python-scripts bruges tjenesten Exception (undtagelse) mest til fejls√łgningsform√•l. Metoder som DebugPrint (fejls√łg_udskrift), Console (konsol) og DebugDisplay (fejls√łg_visning) er nyttige til hurtigt at udskrive beskeder, logge data og √•bne konsolvinduet fra inde fra et Python-script.

note

Ikke alle metoder og egenskaber er tilgængelige for Python-scripts, eftersom sproget Python allerede har et omfattende undtagelses-håndteringssystem.


Kald af tjeneste

I Basic

De f√łlgende eksempler viser tre forskellige tilgange til at kalde metoden Raise (S√¶t flag). Alle andre metoder kan udf√łres p√• en lignende m√•de.


    SF_Exception.Raise(...)
  

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

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

Kodestumpen herunder opretter et eksemplar af tjenesten Exception (undtagelse), loggger en besked og viser vinduet Console (konsol).


    from scriptforge import CreateScriptService
    exc = CreateScriptService("Exception")
    someVar = 100
    exc.DebugPrint("Value of someVar", someVar)
    exc.Console()
  

Egenskaber

Egenskaberne, der er oplistet herunder, er kun tilgængelige for Basic-scripts.

Navn

Skrivebeskyttet

Beskrivelse

Description

Nej

Fejlmeddelelsens tekst

Standardv√¶rdien er "" eller en streng, der indeholder Basic-udf√łrselsesmilj√łet fejlmeddelelse.

Number

Nej

Fejlens kode. Det kan være en numerisk værdi eller en tekst.

Standardv√¶rdien er 0 eller den numeriske v√¶rdi, der svarer til Basic-afviklingsmilj√łets kode.

Source

Nej

Placeringen i koden, hvor fejlen forekom. Det kan være en numerisk værdi eller en tekst.

Standardv√¶rdien er 0 eller kodelinjenummeret for Basics afviklingsmilj√łets fejl.


tip

At sætte eller rydde et Exception- (Undtagelses-)flag nulstiller dens egenskaber.


note

Fejlkode-omr√•det 0-2000 er reserveret til LibreOffice Basic. Brugerdefinerede fejl kan begynde med h√łjere v√¶rdier, for at forebygge sammenst√łd med kommende LibreOffice Basic udvikling.


Linste over metoder i tjenesten Exception (Undtagelse)

Clear
Console
ConsoleClear

ConsoleToFile
DebugDisplay
DebugPrint

PythonPrint
PythonShell
Raise
RaiseWarning


Clear

Nulstiller den aktuelle fejlstatus og rydder egenskaberne i SF_Exception (SF_Undtagelse)

note

Denne metode er kun tilgængelig for Basic-scripts.


Syntaks:


    SF_Exception.Clear()
  

Eksempel:

Det f√łlgende eksempel viser, hvordan man opfanger en undtagelse ved division-med-nul, hvis fejlkode er 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()
            'Ved division-med-nul, ignorerer du fejlen
    End Sub
  
tip

Se en komplet liste over Basic-afviklingsmilj√łets koder i Debugging (Aflusning) af et Basic-program.


Console

Vis konsolbeskederne i en modal eller ikke-modal dialog. I begge tilstande vises alle tidligere beskeder, der er udsendt af metoden DebugPrint() (AflusningsPrint()) eller af en undtagelse. I ikke-modal tilstand, tilf√łjes efterf√łlgende indf√łrsler automatisk.

Hvis konsollen allerede er åben som non-modal, sættes den forrest.

En modal konsol kan udelukkende lukkes af brugeren. En ikke-modal konsol kan lukkes enten af brugeren eller efter en makroafbrydelse.

Syntaks:

exc.Console(modal: bool = True)

Parametre:

modal: Bestemmer, om konsolvinduet er modalt (True (sand)) eller ikke-modalt (False (falsk)). Standardværdien er (True (sand).

Eksempel:

I Basic

        SF_Exception.Console(Modal := False)
  
I Python

    exc.Console(modal = False)
  

ConsoleClear

Rydder konsollen, men beholder et valgfrit antal seneste meddelelser. Hvis konsollen aktiveres i ikke-modal tilstand, genopfriskes den.

Syntaks:

exc.ConsoleClear(keep: int = 0)

Parametre:

bevar: Antallet af nylige beskeder, der skal bevares. Standarrdværdien er 0.

Eksempel:

Det f√łlgende eksempel rydder konsollen og beholder de 10 seneste meddelelser.

I Basic

        SF_Exception.ConsoleClear(10)
  
I Python

    exc.ConsoleClear(10)
  

ConsoleToFile

Eksporterer konsollens indhold til en tekstfil. Hvis filen eksisterer og konsollen ikke er tom, overskrives filen uden varsel. Returnerer True (Sand), hvis funktionen lykkes.

Syntaks:

exc.ConsoleToFile(filename: str): bool

Parametre:

filenavn: Navnet p√• tekstfilen, som konsollen skal dumpes til. Navet udtrykkes i overensstemmelse med den aktuelle FileNaming (filnavngivelse) i tjenesten SF_FileSystem (SF_Filsystem). Som standard tillades b√•de URL-notation og operativsystemets medf√łdte format.

Eksempel:

I Basic

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

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

DebugDisplay

Sammenkæder alle argumenter til en simpel menneske-læselig streng og viser den i et MsgBox (beskedfelt) med et informationsikon og en OK-knap.

Den endelige streng tilf√łjes ogs√• til konsollen.

Syntaks:

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

Parametre:

arg0[, arg1, ...]: Et vilkårligt antal argumenter af en vilkårlig type.

Eksempel:

I Basic

    SF_Exception.DebugDisplay("Current Value", someVar)
  
I Python

    exc.DebugDisplay("Current Value", someVar)
  

DebugPrint

Samler alle de givne argumenter til en enkelt streng, der er l√¶selig for mennesker, og tilf√łjer den som en indf√łrsel i konsollen.

Syntaks:

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

Parametre:

arg0[, arg1, ...]: Et vilkårligt antal argumenter af en vilkårlig type.

Eksempel:

I 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
  
I Python

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

PythonPrint

Viser listen over argumenter i Python-skallens (APSOs) konsol i en læselig form. Argumenter skille med et Tabulatortegn (simuleret med mellemrum).

Den samme streng tilf√łjes til ScriptForges fejlfindingskonsol.

note

Denne metode er kun tilgængelig for Basic-scripts.


Syntaks:


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

Denne metode kræver installation af APSO (Alternative Python Script Organizer)-udvidelsen. APSOkræver på sin side tilstedeværelse af LibreOffice Python scriptrammen. Hvis APSO eller Python mangler, sker der en fejl.


Parametre:

arg0[, arg1, ...]: Ethvert antal argumenter af vilkårlig type. Den maksimale længde på hvert individuelle argument er 1024 tegn.

Eksempel:


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

I Python: brug simpelthen det indbyggede Print() (udskriv())-udtryk.


PythonShell

√Öbner en APSO Python-skal som et ikke-modalt vindue. Et Python-script bliver k√łrende efter at skallen er √•bnet. Uddata fra print (udskrivnings)-udtryk i scriptet vises i skallen.

Der kan kun åbnes et enkelt eksemplar af APSO Python-skallen på et givet tidspunkt. Derfor har det ingen at kalde denne metode, hvis er allerede er åbent en Python-skal.

warning

Denne metode kræver installation af APSO (Alternative Python Script Organizer)-udvidelsen. APSOkræver på sin side tilstedeværelse af LibreOffice Python scriptrammen. Hvis APSO eller Python mangler, sker der en fejl.


Syntaks:

exc.PythonShell(variables: dict)

Parametre:

variabler: en Python-ordbog med varibelnavne og værdier, der videregives til APSO Python-skallen. Som standard videregives alle lokale variabler med Python's indbyggede funktion locals() (lokale()) .

Eksempel:

Eksemplet herunder √•bner APSO Python-skallen ved at videregive alle globale og lokale variabler med henblik p√• den kotakt, som scriptet k√łrer i.


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

N√•r APSO Python-skallen er √•ben, vises alle efterf√łlgende uddata, der udskrives af scriptet, i skallen. Derfor bliver strengen, der udskrives i eksemplet herunder, vist i Python-skallen.


    exc.PythonShell()
    print("Hallo verden!")
  

Raise

Genererer en k√łrselsfejl. Brugeren ser en fejlmeddelelse, der ogs√• rapporteres i konsollen. Udf√łrelsen stoppes. MetodenRaise() (S√¶t flag()) kan placeres inden i den almindelige skriptstr√łm eller i en dedikeret fejlh√•ndterings-rutine.

note

Denne metode er kun tilgængelig for Basic-scripts.


Syntaks:


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

De næste kodestumper er er ligeværdige. De viser alternative måder at sætte et flag på med kode 2100.


    SF_Exception.Raise(2100)
  

    SF_Exception.Number = 2100
    SF_Exception.Raise()
  

    SF_Exception.Raise Number := 2100
  

Parametre:

Number (Nummer): Fejlkoden, som et tal eller en streng. Standardværdien er den samme som i den indbyggede Basic-funktion Err (Fejl).

Source (Kilde): Fejlens placering som et tal eller som en streng. Standardværdi er den samme som i den indbyggede Basic-funktion Erl (Fejl-linje).

Description (Beskrivelse): Den besked, der skal vises brugeren og rapporteres i konsollen). Standardværdi er den samme som i den indbyggede Basic-funktion Error$ (Fejl$).

Eksempel:


    Sub Example_Raise()
        Dim a, b, c
        On Local Error GoTo Catch
        Try:
            a = 10 : b = 0
            c = a / b
            '...
            Exit Sub
        Catch:
            'Se varianter herunder  ...
    End Sub
  

For sætte en undtagelse med standardværdier:


    Catch:
        SF_Exception.Raise()
  

For at sætte et undtagelsesflag med en specifik kode:


    Catch:
        SF_Exception.Raise(11)
  

For at erstatte den sædvanlige besked:


    Catch:
        SF_Exception.Raise(, , "Det er ikke en god ide at dividere med nul.")
  

For at sætte et programfejls-flag:


    Catch:
        SF_Exception.Raise("MyAppError", "Example_Raise()", "Noget er gået galt!")
  

RaiseWarning

Denne metode har n√łjagtig samme synks, argumenter og adf√¶rd som metoden Raise() (S√¶t flag()).

N√•r der imidlertid s√¶ttes et advarselsflag, stoppes makroudf√łrelsen ikke.

note

Denne metode er kun tilgængelig for Basic-scripts.


Syntaks:


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

Parametre:

Number (Nummer): Fejlkoden, som et tal eller en streng. Standardværdien er den samme som i den indbyggede Basic-funktion Err (Fejl).

Source (Kilde): Fejlens placering som et tal eller som en streng. Standardværdi er den samme som i den indbyggede Basic-funktion Erl (Fejl-linje).

Description (Beskrivelse): Den besked, der skal vises brugeren og rapporteres i konsollen). Standardværdi er den samme som i den indbyggede Basic-funktion Error$ (Fejl$).

Eksempel:


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

St√łt os venligst!