Tenesta ScriptForge.Exception

Tenesta Exception (unnatak) er ei samling av metodar som hjelper til med med feilsĂžking (debugging) av kode i Basic- og Python-skript og feilhandsaming i Basic-skript.

NÄr det oppstÄr ein kÞyretidsfeil i Basic-skript, hjelper metodane og eigenskapane til Exception-tenesta til Ä identifisere feilsamanhengen og tillata Ä handsama han.

tip

Feil og Ätvaringar som oppstÄr med tenesta Exception vert lagra i minnet og kan hentast fram ved hjelp av metoden Console.


Tenestekonsollen Exception lagrar hendingar, variabelverdiar og opplysningar om feil. Bruk konsollen nÄr BASIC-IDE ikkje er lett tilgjengeleg, for eksempel i Calc user defined functions eller under handsaming av hendingar.

Bruk metoden DebugPrint for Ă„ leggja kva relevant informasjon som helst til i konsollen. KonsolloppfĂžringar kan dumpast til ei tekstfil eller visualiserast i eit dialogvindauge.

NÄr det oppstÄr ein feil, kan ein programmakro:

  1. Rapporter feilen i konsollen Exception

  2. Informere brukaren om feilen ved hjelp av ei standardmelding eller ei eigendefinert melding

  3. Eventuelt stoppa utfĂžringa

I Python-skript vert tenesta Exception mest brukt til feilsÞkingsfÞremÄl. Metodar som DebugPrint, Console og DebugDisplay er nyttige for raskt Ä skriva ut meldingar, logge data og opna konsollvindauget frÄ eit Python-skript.

note

Ikkje alle metodar og eigenskapar er tilgjengelege for Python-skript sidan Python-sprÄket alt har eit omfattande unntakshandsamingssystem.


Oppkall av tenester

I Basic

Eksempla nedanfor viser tre forskjellige framgangsmÄtar for Ä kalle opp metoden Raise. Alle andre metodar kan utfÞrast pÄ ein liknande mÄte.


    SF_Exception.Raise(...)
  

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

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

Kodesnutten nedanfor lagar eit eksemplar av tenesta Exception, loggar ei melding og viser vindauget Console.


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

Eigenskapar

Eigenskapane som er oppfĂžrt nedanfor er berre tilgjengelege for Basic-skript.

Namn

Skriveverna

Beskriving

Description

Nei

Teksten i feilmeldinga.

Standardverdien er "" eller ein streng som inneheld Basic-feilmeldinga om kĂžyretid.

Number

Nei

Koden for feilen. Det kan vera ein numerisk verdi eller ein tekst.

Standardverdien er 0 eller den talverdien som svarar til koden for Basic kĂžyretidsfeil.

Source

Nei

Staden i koden der feilen oppstod. Det kan vera ein talverdi eller ein tekst.

Standardverdien er 0 eller kodelinjenummeret for ein standard Basic kĂžyretidsfeil.


tip

NĂ„r du set eller ryddar ein Exception vert eigenskapane nullstilte.


note

Feilkodane 0-2000 er reserverte for LibreOffice Basic. Brukardefinerte feil mÄ byrja frÄ hÞgare verdiar for Ä unngÄ kollisjon med framtidige utgÄver av LibreOffice Basic.


Liste over metodar i tenesta Exception

Clear
Console
ConsoleClear

ConsoleToFile
DebugDisplay
DebugPrint

PythonPrint
PythonShell
Raise
RaiseWarning


Clear

Tilbakestiller gjeldande feilstatus og slettar SF_Exception-eigenskapane.

note

Denne metoden er tilgjengeleg berre for Basic-skript.


Syntaks:


    SF_Exception.Clear()
  

Eksempel:

Eksempelet nedanfor viser korleis du fangar opp eit unnatak for deling med null, der feilkoden 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()
            ' viss divisjon med null, ignorer feilen
    End Sub
  
tip

Viss du vil ha ei fullstendig liste over feilkoder for Basic kÞyretid, kan du sjÄ Debugging a Basic Program.


Console

Viser konsollmeldingane i eit modalt eller ikkje-modalt dialogvindauge. I begge modusane vert alle tidlegare meldingar utsend av ein DebugPrint()-metode viste, eller som er eit resultat av eit unnatak. I ikkje-modal modus vert dei etterfĂžlgjande oppfĂžringane lagde til automatisk.

Viss konsollen alt er ope som ikkje-modal, vert han flytt fremst.

Ein modal konsoll kan berre lukkast av brukaren. Ein ikkje-modal konsoll kan anten lukkast av brukaren eller ved makroavslutning.

Syntaks:

exc.Console(modal: bool = True)

Parametrar:

modal: Bestemmer om konsollvindauget er modalt (Sann) eller ikkje-modalt (Usann). Standardverdien er Sann

Eksempel:

I Basic

        SF_Exception.Console(Modal := False)
  
I Python

    exc.Console(modal = False)
  

ConsoleClear

TÞmmer konsollen og beheld ei valfri mengd av dei siste meldingane. Viss konsollen er slÄtt pÄ i ikkje-modal modus, vert han oppdatert.

Syntaks:

exc.ConsoleClear(keep: int = 0)

Parametrar:

keep: Talet pÄ nylege meldingar som skal behaldast. Standardverdien er 0

Eksempel:

Det neste eksempelet tĂžmmer konsollen men beheld dei 10 siste meldingane.

I Basic

        SF_Exception.ConsoleClear(10)
  
I Python

    exc.ConsoleClear(10)
  

ConsoleToFile

Eksporterer innhaldet i konsollen til ei tekstfil. Viss fila finst frÄ fÞr og konsollen ikkje er tom, vert ho overskrive utan varsel. Returnerer Sann viss vellukka.

Syntaks:

exc.ConsoleToFile(filename: str): bool

Parametrar:

filnamn: Namnet pÄ tekstfila konsollen skal dumpast inn i. Namnet er uttrykt i samsvar med den gjeldande FileNaming-eigenskapen i tenesta SF_FileSystem. Som standard er bÄde URL-notasjon og formatet brukt av operativsystemet tillatne.

Eksempel:

I Basic

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

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

DebugDisplay

SlÄr saman alle argumenta til éin enkelt lesbar streng og viser han i ein MsgBox med eit informasjonsikon og ein OK-knapp.

Den endelege strengen vert ogsÄ lagt til i konsollen.

Syntaks:

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

Parametrar:

arg0[, arg1, ...]: Eit vilkÄrleg tal pÄ argument av kva type som helst.

Eksempel:

I Basic

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

    exc.DebugDisplay("Current Value", someVar)
  

DebugPrint

Set saman alle dei gjevne argumenta til Ă©in enkelt leseleg streng og legg han til som ei ny oppfĂžring i konsollen.

Syntaks:

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

Parametrar:

arg0[, arg1, 
]: Eit vilkÄrleg tal pÄ argument av kva type som helst.

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 lisa med argument i konsollen for Python-shell (APSOs) i ei leseleg form. Argumenta vert skilde med eit tabulatortikn (simulert med mellomrom).

Den same strengen vert lagt til i feilfinningskonsollen for ScriptForges.

note

Denne metoden er tilgjengeleg berre for Basic-skript.


Syntaks:


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

Denne metoden krev at utvidinga APSO (Alternative Script Organizer for Python) er installert. I sin tur krev APSO at LibreOffice Python-scriptramma finst. Viss APSO eller Python manglar, oppstÄr det ein feil.


Parametrar:

arg0[, arg1, ...]: Kva tal pÄ argument som helst av vilkÄrleg type. Maksimal lengd pÄ kvart einskild argument er 1024 teikn.

Eksempel:


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

I Python brukar du det innebygde uttrykket print().


PythonShell

Opnar eit APSO Python-skall som eit ikkje-modalt vindauge. Python-skriptet held fram med Ä kÞyra etter at skalet er opna. Utdata frÄ print-setningar inne i skriptet vert viste i skalet.

Berre éin enkelt fÞrekomst av APSO Python-skalet kan opnast nÄr som helst. Difor, viss eit Python-skal er opna frÄ fÞr, vil oppkall av denne metoden ikkje ha nokon effekt.

warning

Denne metoden krev at utvidinga APSO (Alternative Script Organizer for Python) er installert. I sin tur krev APSO at LibreOffice Python-scriptramma finst. Viss APSO eller Python manglar, oppstÄr det ein feil.


Syntaks:

exc.PythonShell(variables: dict)

Parametrar:

variablar: ei Python-ordbok med variabelnamn og verdiar som vert sende vidare til APSO Python-skalet. Som standard vert alle lokale variablar gjevne vidare ved Ă„ bruka Python sin innebygde funksjon locals().

Eksempel:

Eksempelet nedanfor opnar APSO Python-skalet og sender alle globale og lokale variablar vidare med tanke pÄ samanhengen skriptet kÞyrer i.


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

NĂ„r APSO Python-skalet er ope, vert alle utdata som fĂžlgjer etter og skrivne ut av skriptet viste i skalet. Difor vert strengen som er skrive ut i eksempelet nedanfor vist i Python-skalet.


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

Raise

Genererer ein kĂžyretidsfeil. Ei feilmelding vert vist til brukaren og rapportert i konsollen. UtfĂžringa er stoppa. Metoden Raise() kan setjast inn i den normale skriptflyten eller i ein dedisert feilhandsamingsrutine.

note

Denne metoden er tilgjengeleg berre for Basic-skript.


Syntaks:


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

Dei neste kodesnuttane er likeverdige. Dei viser alternative mÄtar Ä gjera unntak pÄ med kode 2100.


    SF_Exception.Raise(2100)
  

    SF_Exception.Number = 2100
    SF_Exception.Raise()
  

    SF_Exception.Raise Number := 2100
  

Parametrar:

Tal: Feilkoden som eit tal eller som ein streng. Standardverdien er den same som for den innebygde Basic-funksjonen Err.

Kjelde: Plasseringa av feilen som eit tal eller som ein streng. Standardverdien er den same som for den innebygde Basic-funksjonen Erl.

Description: Meldinga som skal visast til brukaren og rapporterast i konsollen). Standardverdien er den same som i den innebyggde Basic-funksjonen Error$ (Feil$).

Eksempel:


    Sub Example_Raise()
        Dim a, b, c
        On Local Error GoTo Catch
        Try:
            a = 10 : b = 0
            c = a / b
            '...
            Exit Sub
        Catch:
            ' SjÄ variantar nedanfor 

    End Sub
  

For Ă„ setja eit unnatak med standardverdiar:


    Catch:
        SF_Exception.Raise()
  

For Ă„ setja eit unnatak med ein bestemt kode:


    Catch:
        SF_Exception.Raise(11)
  

For Ă„ byta ut den vanlege meldinga:


    Catch:
        SF_Exception.Raise(, , "Det er ein dÄrleg ide Ä dividera med null.")
  

Slik set du opp ein programfeil:


    Catch:
        SF_Exception.Raise("MyAppError", "Example_Raise()", "Noko har gÄtt gale!")
  

RaiseWarning

Denne metode har nĂžyaktig same syntaks, argument og oppfĂžrsel som metoden Raise().

NĂ„r ei Ă„tvaring vert sett, vert makroutfĂžringa ikkje stoppa.

note

Denne metoden er tilgjengeleg berre for Basic-skript.


Syntaks:


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

Parametrar:

Tal: Feilkoden som eit tal eller som ein streng. Standardverdien er den same som for den innebygde Basic-funksjonen Err.

Kjelde: Plasseringa av feilen som eit tal eller som ein streng. Standardverdien er den same som for den innebygde Basic-funksjonen Erl.

Description: Meldinga som skal visast til brukaren og rapporterast i konsollen). Standardverdien er den same som i den innebyggde Basic-funksjonen Error$ (Feil$).

Eksempel:


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

StĂžtt oss!