Tenesta ScriptForge.Exception (SF_Exception)

Innhald
Innhaldsliste 🔎︎

# 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.

- Tenesta SF_Exception liknar på objektet VBA Err.

- Eigenskapen Number identifiserer feilen.

- Bruk metoden Raise for å avbryta handsaminga. Metoden RaiseWarning kan brukast til å fanga opp eit avvik frå reglane utan å bryta av makrokøyringa.

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.

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.

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

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.

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

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.

Denne metoden er tilgjengeleg berre for Basic-skript.

### Syntaks:

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

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))

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.

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.

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.

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")

Liknande emne

Funksjonar for feilhandsaming