LibreOffice 25.2 Hjelp
Tenesta Exception (unntak) 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 å identifisera 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:
Rapporter feilen i konsollen Exception
Informere brukaren om feilen ved hjelp av ei standardmelding eller ei tilpassa melding
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.
Før du brukar Exception-tenesta må ScriptForge-biblioteket lastast ned eller importerast:
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(...)
  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()
  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.
| Liste over metodar i tenesta Exception | ||
|---|---|---|
Tilbakestiller gjeldande feilstatus og slettar SF_Exception-eigenskapane.
    SF_Exception.Clear()
  Eksempelet nedanfor viser korleis du fangar opp eit unntak 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.
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 unntak. 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.
exc.Console(modal: bool = True)
modal: Bestemmer om konsollvindauget er modalt (Sann) eller ikkje-modalt (Usann). Standardverdien er Sann
        SF_Exception.Console(Modal := False)
  
    exc.Console(modal = False)
  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.
exc.ConsoleClear(keep: int = 0)
keep: Talet på nylege meldingar som skal behaldast. Standardverdien er 0
Det neste eksempelet tømmer konsollen men beheld dei 10 siste meldingane.
        SF_Exception.ConsoleClear(10)
  
    exc.ConsoleClear(10)
  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.
exc.ConsoleToFile(filename: str): bool
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.
        SF_Exception.ConsoleToFile("C:\Documents\myFile.txt")
  
    exc.ConsoleToFile(r"C:\Documents\myFile.txt")
  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.
exc.DebugDisplay(arg0: any, [arg1: any, ...])
arg0[, arg1, ...]: Eit vilkårleg tal på argument av kva type som helst.
    SF_Exception.DebugDisplay("Current Value", someVar)
  
    exc.DebugDisplay("Current Value", someVar)
  Set saman alle dei gjevne argumenta til éin enkelt leseleg streng og legg han til som ei ny oppføring i konsollen.
exc.DebugPrint(arg0: any, [arg1: any, ...])
arg0[, arg1, …]: Eit vilkårleg tal på argument av kva type som helst.
    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
  
    exc.DebugPrint(None, [1, 2, 3], "line1\nline2")
    # None  [1, 2, 3]  line1\nline2
  Viser lisa med argument i plattform-konsollen i ei leseleg form. Argumenta vert skilde med eit tabulatorteikn (simulert med mellomrom).
Den same strengen vert lagt til i feilfinningskonsollen for ScriptForges.
Hvis Python shell (APSO) er slått på vert innhaldet i PythonPrint skrive til APSO-konsollen i staden for plattformkonsollen.
  exc.PythonPrint(arg0: any, [arg1: any, ...])
  arg0[, arg1, ...]: Kva tal på argument som helst av vilkårleg type. Maksimal lengd på kvart einskild argument er 1024 teikn.
    exc.PythonPrint(a, Array(1, 2, 3), , "line1" & Chr(10) & "Line2", DateSerial(2020, 04, 09))
  I Python brukar du eit print-uttrykk for å skriva til APSO-konsollen eller metoden DebugPrint for å skriva til ScriptForge-konsollen.
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.
exc.PythonShell(opt variables: dict, background = 0xFDF6E3, foreground = 0x657B83)
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().
bakgrunn: Bakgrunnsfarge for konsollen spesifisert som RGB 24-bits heiltalsverdi. Standardbakgrunnen er som APSO.
forgrunn: Forgrunnsfarge for konsollen spesifisert som RGB 24-bits heiltalsverdi. Standardbakgrunnen er som APSO.
Eksempelet nedanfor opnar APSO Python-skallet og sender alle globale og lokale variablar med tanke på samanhengen der skriptet vert køyrd. Konsollen vert vist med kvite teikn på svart bakgrunn.
    exc.PythonShell({**globals(), **locals()}, \
        background = 0x0, foreground = 0xFFFFFF)
  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.
    s = CreateScriptService('Basic')
    RED, BLUE = s.RGB(255,0,0), s.RGB(0,0,255)
    exc.PythonShell(background=RED, foreground=BLUE)
    print("Hallo verda!")
  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.
    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
  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$).
    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
  Slik set du eit unntak med standardverdiar:
    Catch:
        SF_Exception.Raise()
  Slik set du eit unntak 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!")
  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.
    SF_Exception.RaiseWarning([Number As Variant], [Source As Variant], [Description As String])
  
    SF_Exception.RaiseWarning(Source:="Example_Raise()", _
        Description:="Det skjedde noko gale.", _
        Number:="MyAppError")