Innhold

# ScriptForge.Unntak-tjeneste

Tjenesten Unntak er en samling metoder for å hjelpe til med kodefeilsøking i Basic- og Python-skript og i feilhåndtering i Basic-skript.

I Grunnleggende skript, når en kjøretidsfeil oppstår, hjelper metodene og egenskapene til Exception-tjenesten å identifisere feilkonteksten og tillate å håndtere den.

- Tjenesten SF_Exception ligner VBA Err-objektet.

- Egenskapen Number identifiserer feilen.

- Bruk metoden Raise for å avbryte behandlingen. Metoden RaiseWarning kan brukes til å fange en anomali uten å avbryte makrokjøringen.

Feil og advarsler som oppstår med Unntak-tjenesten lagres i minnet og kan hentes ved hjelp av konsoll-metoden.

Tjenestekonsollen Unntak lagrer hendelser, variabelverdier og informasjon om feil. Bruk konsollen når Basic IDE ikke er lett tilgjengelig, for eksempel i Calc user defined functions (UDF) eller under behandling av hendelser.

Bruk metoden DebugPrint for å legge til relevant informasjon til konsollen. Konsolloppføringer kan dumpes til en tekstfil eller visualiseres i et dialogvindu.

Når det oppstår en feil, kan en programmakro:

1. Rapporter feilen i Unntak-konsollen

2. Informer brukeren om feilen ved å bruke enten en standardmelding eller en egendefinert melding

3. Stopp eventuelt utførelsen

I Python-skript brukes Unntak-tjenesten for det meste til feilsøkingsformål. Metoder som DebugPrint, Console og DebugDisplay er nyttige for raskt å skrive ut meldinger, loggdata og åpne konsollvinduet fra et Python-skript.

Ikke alle metoder og egenskaper er tilgjengelige for Python-skript siden Python-språket allerede har et omfattende unntakshåndteringssystem.

## Tjenestepåkallelse

Før du bruker Exception-tjenesten, må ScriptForge-biblioteket lastes eller importeres:

• Grunnleggende makroer krever å laste ScriptForge-biblioteket ved hjelp av følgende setning:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Python-skript krever import fra scriptforge-modulen:
fra scriptforge import CreateScriptService

##### I Basic

Følgende eksempler viser tre forskjellige tilnærminger til å kalle metoden Raise. Alle andre metoder kan utføres på lignende måte.

        SF_Exception.Raise(...)

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

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

##### I Python

Kodebiten nedenfor oppretter en forekomst av Exception-tjenesten, logger en melding og viser Konsoll-vinduet.

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

## Egenskaper

Egenskapene som er oppført nedenfor er kun tilgjengelige for Grunnleggende-skript.

Navn | Skrivebeskyttet | Beskrivelse
--- | --- | ---
Description | Nei | Feilmeldingsteksten. Standardverdien er "" eller en streng som inneholder grunnleggende kjøretidsfeilmelding.
Number | Nei | Koden til feilen. Det kan være en numerisk verdi eller tekst. Standardverdien er 0 eller den numeriske verdien som tilsvarer den grunnleggende kjøretidsfeilkoden.
Source | Nei | Stedet i koden der feilen oppsto. Det kan være en numerisk verdi eller tekst. Standardverdien er 0 eller kodelinjenummeret for en standard grunnleggende kjøretidsfeil.

Å heve eller fjerne et unntak tilbakestiller egenskapene.

Feilkodeområde 0-2000 er reservert for LibreOffice Basic. Brukerdefinerte feil kan starte fra høyere verdier for å forhindre kollisjon med LibreOffice Basic fremtidig utvikling.

Liste over metoder i unntakstjenesten
Clear Console ConsoleClear ConsoleToFile | DebugDisplay DebugPrint PythonPrint | PythonShell Raise RaiseWarning

## Clear

Tilbakestiller gjeldende feilstatus og sletter SF_Exception-egenskapene.

Denne metoden er bare tilgjengelig for Basic -skript.

### Syntaks:

        SF_Exception.Clear()

### Eksempel:

Følgende eksempel viser hvordan du fanger et divisjon-for-null unntak, hvis feilkode 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()
                'Hvis du deler med null, ignorer feilen
        End Sub

For en fullstendig liste over grunnleggende kjøretidsfeilkoder, se Feilsøke et grunnleggende program.

## Console

Viser konsollmeldingene i en modal eller ikke-modal dialog. I begge modusene vises alle tidligere meldinger utstedt av en DebugPrint()-metode eller som er et resultat av et unntak. I ikke-modal modus legges påfølgende oppføringer til automatisk.

Hvis konsollen allerede er åpen, når den ikke er modal, sendes den til front.

En modal konsoll kan kun lukkes av brukeren. En ikke-modal konsoll kan enten lukkes av brukeren eller ved makroavslutning.

### Syntaks:

exc.Console(modal: bool = True)

### Parametre:

modal: Bestem om konsollvinduet er modalt (Sann) eller ikke-modalt (Usann). Standardverdien er Sann.

### Eksempel:

##### I Basic

            SF_Exception.Console(Modal := False)

##### I Python

        exc.Console(modal = False)

## ConsoleClear

Tømmer konsollen og beholder et valgfritt antall nylige meldinger. Hvis konsollen er aktivert i ikke-modal modus, oppdateres den.

### Syntaks:

exc.ConsoleClear(keep: int = 0)

### Parametre:

behold: Antallet nylige meldinger som skal beholdes. Standardverdien er 0.

### Eksempel:

Følgende eksempel sletter konsollen ved å beholde de 10 siste meldingene.

##### I Basic

            SF_Exception.ConsoleClear(10)

##### I Python

        exc.ConsoleClear(10)

## ConsoleToFile

Eksporterer innholdet i konsollen til en tekstfil. Hvis filen allerede eksisterer og konsollen ikke er tom, vil den bli overskrevet uten forvarsel. Returnerer Sann hvis vellykket.

### Syntaks:

exc.ConsoleToFile(filename: str): bool

### Parametre:

filnavn: Navnet på tekstfilen konsollen skal dumpes inn i. Navnet er uttrykt i henhold til den gjeldende FileName-egenskapen til SF_FileSystem-tjenesten. Som standard tillates URL-notasjon og det opprinnelige operativsystemets formater.

### Eksempel:

##### I Basic

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

##### I Python

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

## DebugDisplay

Slår sammen alle argumentene til en enkelt lesbar streng og viser den i en MsgBox med et informasjonsikon og en OK-knapp.

Den siste strengen legges også til konsollen.

### Syntaks:

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

### Parametre:

arg0[, arg1, ...]: Et hvilket som helst antall argumenter av enhver type.

### Eksempel:

##### I Basic

        SF_Exception.DebugDisplay("Current Value", someVar)

##### I Python

        exc.DebugDisplay("Current Value", someVar)

## DebugPrint

Setter sammen alle de gitte argumentene til en enkelt lesbar streng og legger den til som en ny oppføring i konsollen.

### Syntaks:

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

### Parametre:

arg0[, arg1, ...]: Et hvilket som helst antall argumenter av enhver 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 en lesbar form i plattformkonsollen. Argumenter er atskilt med et TAB-tegn (simulert med mellomrom).

Den samme strengen legges til ScriptForge feilsøkingskonsollen.

Hvis Python shell (APSO) er aktiv, skrives PythonPrint-innhold til APSO-konsollen i stedet for plattformkonsollen.

Denne metoden er bare tilgjengelig for Basic -skript.

### Syntaks:

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

### Parametre:

arg0[, arg1, ...]: Et hvilket som helst antall argumenter av enhver type. Maksimal lengde på hvert enkelt argument er 1024 tegn.

### Eksempel:

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

I Python bruk en utskrifts-setning for å skrive ut til APSO-konsollen eller bruk DebugPrint-metoden for å skrive ut til ScriptForges konsollen.

## PythonShell

Åpner et APSO Python-skall som et ikke-modalt vindu. Python-skriptet fortsetter å kjøre etter at skallet er åpnet. Utdataene fra utskrifts-setninger inne i skriptet vises i skallet.

Åpner et APSO Python-skall som et ikke-modalt vindu. Python-skriptet fortsetter å kjøre etter at skallet er åpnet. Utdataene fra print-setninger inne i skriptet vises i skallet.

Denne metoden krever installasjon av APSO (alternativt) Skript Organisator for Python) utvidelse. I sin tur krever APSO tilstedeværelsen av LibreOffice Python-skriptrammeverk. Hvis APSO eller Python mangler, oppstår det en feil.

### Syntaks:

exc.PythonShell(opt variables: dict, background = 0xFDF6E3, foreground = 0x657B83)

### Parametre:

variabler: en Python-ordbok med variabelnavn og verdier som sendes videre til APSO Python-skallet. Som standard sendes alle lokale variabler ved hjelp av Pythons innebygde locals() funksjon.

bakgrunn: Bakgrunnsfargen til konsollen spesifisert som RGB 24 bits heltallsverdi. Standard bakgrunn er APSO.

forgrunn: Forgrunnsfargen til konsollen spesifisert som RGB 24 bits heltallsverdi. Standard forgrunn er den for APSO.

### Eksempel:

Eksemplet nedenfor åpner APSO Python-skallet og sender alle globale og lokale variabler med tanke på konteksten der skriptet kjører. Konsollen vises med hvite tegn på svart bakgrunn.

        exc.PythonShell({**globals(), **locals()}, \
            background = 0x0, foreground = 0xFFFFFF)

Når APSO Python-skallet er åpent, vil alle påfølgende utdata som skrives ut av skriptet bli vist i skallet. Derfor vil strengen som er skrevet ut i eksemplet nedenfor vises i Python-skallet.

        s = CreateScriptService('Basic')
        RED, BLUE = s.RGB(255,0,0), s.RGB(0,0,255)
        exc.PythonShell(background=RED, foreground=BLUE)
        print("Hei verden!")

## Raise

Genererer en kjøretidsfeil. En feilmelding vises til brukeren og rapporteres i konsollen. Kjøringen er stoppet. Metoden Raise() kan plasseres i den normale skriptflyten eller i en dedikert feilhåndteringsrutine.

Denne metoden er bare tilgjengelig for Basic -skript.

### Syntaks:

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

Kodebitene som presenteres neste er likeverdige. De viser alternative måter å gjøre unntak på med kode 2100.

        SF_Exception.Raise(2100)

        SF_Exception.Number = 2100
        SF_Exception.Raise()

        SF_Exception.Raise Number := 2100

### Parametre:

Nummer: Feilkoden, som et tall eller som en streng. Standardverdien er den for Err Grunnleggende innebygd funksjon.

Feilkodeområde 0-2000 er reservert for LibreOffice Basic. Brukerdefinerte feil kan starte fra høyere verdier for å forhindre kollisjon med LibreOffice Basic fremtidig utvikling.

Kilde: Plasseringen av feilen, som et tall eller som en streng. Standardverdien er den for Erl Grunnleggende innebygd funksjonen.

Beskrivelse: Meldingen som skal vises til brukeren og rapporteres i konsollen. Standardverdien er den for Error$ Grunnleggende innebygde funksjonen.

### 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 nedenfor ...
        End Sub

Slik gjør du et unntak med standardverdiene:

        Catch:
            SF_Exception.Raise()

Slik oppretter du et unntak med en bestemt kode:

        Catch:
            SF_Exception.Raise(11)

Slik erstatter du den vanlige meldingen:

        Catch:
            SF_Exception.Raise(, , "Det er ikke en god idé å dele på null.")

Slik rapporterer du en applikasjonsfeil:

        Catch:
            SF_Exception.Raise("MyAppError", "Example_Raise()", "Noe galt skjedde!")

## RaiseWarning

Denne metoden har nøyaktig samme syntaks, argumenter og oppførsel som Raise()-metoden.

Men når en advarsel sendes, stanses ikke kjøringen av makroen.

Denne metoden er bare tilgjengelig for Basic -skript.

### Syntaks:

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

### Parametre:

Nummer: Feilkoden, som et tall eller som en streng. Standardverdien er den for Err Grunnleggende innebygd funksjon.

Feilkodeområde 0-2000 er reservert for LibreOffice Basic. Brukerdefinerte feil kan starte fra høyere verdier for å forhindre kollisjon med LibreOffice Basic fremtidig utvikling.

Kilde: Plasseringen av feilen, som et tall eller som en streng. Standardverdien er den for Erl Grunnleggende innebygd funksjonen.

Beskrivelse: Meldingen som skal vises til brukeren og rapporteres i konsollen. Standardverdien er den for Error$ Grunnleggende innebygde funksjonen.

### Eksempel:

        SF_Exception.RaiseWarning(Source:="Example_Raise()", _
            Description:="Noe galt skjedde !", _
            Tall:="MyAppError")

Lignende emner

Feilhåndterings- funksjoner