OnAutoItError?

  • Naja, ich weis nicht obs ses gibt, aber wenn ein Fehler auftritt, wie soll der dann noch weiter rechnen/arbeiten.
    Das ist doch wie wenn ich meinem Rechner den Stecker ziehe(ohne Akku) und er läuft noch solang bis er fertig gerechnet hat,oder? :rofl:

  • Zitat

    Naja, ich weis nicht obs ses gibt, aber wenn ein Fehler auftritt, wie soll der dann noch weiter rechnen/arbeiten.
    Das ist doch wie wenn ich meinem Rechner den Stecker ziehe(ohne Akku) und er läuft noch solang bis er fertig gerechnet hat,oder? :rofl:

    Ne nicht direkt. Da AutoIt "nur" eine Interpretersprache ist, beendet der Interpreter sozusagen das Script. Es ist aber bestimmt möglich, das der Interpreter kurz davor eine Funktion ausführen kann. Schließlich wird bei einem Fehler auch ein Dialog mit dem Fehler angezeigt :D

    Edit: Meine Idee war, das bei einem Fehler ein anders Script ausgeführt wird, das den Fehler "analysiert" und überprüft, woran das liegen kann.

    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit]

    OnAutoItExitRegister("Test")
    $Result =StringSplit("1|2|3|4","|")
    For $i= 1 To 10
    ConsoleWrite($Result[$i] & @CRLF)
    Next
    Func Test()
    MsgBox(0,"Fehler","Fehler oder Programmende")
    EndFunc

    [/autoit]

    Das Script compilieren und ausführen. Die Funktion Test wird erst nach der Ausgabe des Fehlers aufgerufen oder bei regulärem Programmende.

  • Ich hab gerade zufällig was gefunden 8|

    Script ist von MrCreatoR
    http://www.autoitscript.com/forum/index.php?showtopic=79879&st=0&p=575411&#entry575411

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Run_AU3Check=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.2.0
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _AutoItErrorHandler()

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"","")

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "" ;This is meant to produce an error !

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _AutoItErrorHandler()
    If StringInStr($CmdLineRaw, "/AutoIt3ExecuteScript") Then Return

    [/autoit] [autoit][/autoit] [autoit]

    Local $sErrorMsg = ""
    Local $sRunLine = @AutoItExe & ' /ErrorStdOut /AutoIt3ExecuteScript "' & @ScriptFullPath & '"'

    [/autoit] [autoit][/autoit] [autoit]

    Local $iPID = Run($sRunLine, @ScriptDir, 0, 2 + 4)
    ProcessWait($iPID)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $sErrorMsg &= StdoutRead($iPID)
    If @error Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(1)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    If $sErrorMsg = "" Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(262144+48, "AutoIt3 Error Message", _
    StringFormat("Program Terminated <%s>.\n\nError Message:\n\n%s\n\n" & _
    "Please report about this bug to the author, sory for the inconvenience! :( ", @ScriptName, $sErrorMsg))

    [/autoit] [autoit][/autoit] [autoit]

    Exit
    EndFunc

    [/autoit]

    Edit: Nun Nachteil bei dieser Lösung ist, dass 2 Prozesse von einem Script laufen. :whistling:

  • Wie wäre es mit

    [autoit]


    If @error Then
    ...
    EndIf

    [/autoit]

    Müsstest Du halt quasie nach jeder Funktion einbauen um Fehler abzufangen. Von so einer Art allgemeiner Option wüsste ich jetzt auch nix.

  • Schwerwiegende Fehler, wie etwa Array out of bounds sollten in einem fertigen Skript gar nicht mehr auftreten. Dazu muss man nur umsichtig programmieren und Fehlerabfragen einbauen, etwa ein If @error oder If IsArray. Wird das Konsequent durchgezogen, sollte der Endanwender keine AutoIt-internen Fehlermeldungen mehr sehen ;)