Fehler abfangen

  • Hallo,

    folgendes Problem:

    [autoit]


    Case $Start
    _MeineFunc()

    [/autoit]

    Wie kann ich hier einen Fehler
    wenn die Func aufgerufen wird, abfangen
    ohne das Script zu beenden.

    Habe in der Func schon probiert

    [autoit]


    If @error then
    Msgbox(0,"","Bitte Daten eingeben")
    endif
    ;Func.....

    [/autoit]

    aber ich muß ja in der While Schleife bleiben...

    Klappt alles irgendwie nicht

    Grüße
    Ilse ;)

  • 1. mit solchen kleinen codeschnipseln kann dir keiner helfen, du solltest mindestens die komplette Schleife und deine Funktion posten
    2. wäre eine etwas genauere beschreibung des Fehlers nich schlecht, wenigstens über welche Art von Fehler wird reden
    2. in AutoIt kann man afaik keine Fehler abfangen, man kann nur verhindern, dass sie Auftreten
    mfg inventor

    MFG inventor

    wenn's weitere Fragen gibt -> PN
    wenn da keine Antwort kommt, überdenk deine Frage noch mal

  • inventor: Das stimmt so nicht ganz...man kann Fehler sehr wohl abfangen. Z.B. Wenn in der Funktion FileOpen ein Fehler auftritt, wird die Variabel @error gesetzt (je nach Fehler auf verschiedene Werte, nachzulesen in der Hilfe), dadurch kann man diese dann abfangen (wie er oben bereits die If-Abfrage korrekt geschrieben hat) und anstelle eines Programmabsturzes eine Fehlermeldung oder so ausgeben, damit man den Fehler beheben kann.

    Ilse Ein bisschen mehr Code wäre aber schon wünschenswert...vorallem die Funktion brauchen wir, ansonsten ist es unmöglich nahzuvollziehen, was dein Problem ist (und auch ein bisschen als Absicherung, damit du dich brav an die Forenregeln hällst ;) )

    mfg General

    Bild1: Ich beim debuggen

  • Ilse, um nur den Fehler abzufangen ohne das sich das Script beendet kannst du es so machen ;)

    [autoit]

    If @error Then
    Return

    [/autoit]

    Aus deinem zweiten Code-Schnipsel kann man zumindest ansatzweise erkennen das es wohl um eine gewollte Fehlermeldung dreht wenn Daten fehlen oder?

    Das würde ich dann nur so machen ohne error.

    [autoit]

    $datenfeld1 = GUICtrlCreateInput("", 100, 100, 50, 20)
    If $datenfeld1 = "" Then Msgbox(0,"Fehler","Bitte Daten eingeben");wenn Input $datenfeld1 leer "" dann Meldung das Daten fehlen ;)

    [/autoit]

    Aber etwas mehr Code wäre mit Sicherheit hilfreich :)

  • Ich meinte eig nur, dass es keine try ... catch funktionen gibt, aber es sind natürlich in den meisten Funtionen Mechanismen eingebaut, damit das script nicht immer gleich stecken bleibt und man auf eventuelle "Fehler" reagieren kann

    MFG inventor

    wenn's weitere Fragen gibt -> PN
    wenn da keine Antwort kommt, überdenk deine Frage noch mal

  • Hallo,

    erstmal danke für die vielen Posts...

    Ist alles ziemlich komplex,
    deshalb wollte ich nur das wichtigste posten, damit man es
    nachvollziehen kann.

    Also:
    Die Func... braucht eine ID
    Wenn die noch nicht existiert
    und der Button geklickt wird brauche ich die Meldung
    daß zuerst eine ID erzeugt werden soll.

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

    Func _MeineFunc()

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

    $s_Input = $i_FontID
    ;....
    ;....
    _WinAPI_RedrawWindow ($h_Gui, 0, 0, 0x0002)

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


    Autolaser
    http://translation.autoit.de/onlinehilfe/keywords.htm

    [autoit]


    If @error Then
    Return

    [/autoit]

    hat leider nicht geklappt,
    weil anschließend der Button generell
    nichts mehr macht. Ich könnte mit If ID >=....

    Vielleicht noch eine Idee?

    Kürze dann den Code
    und melde mich wieder


    Grüße
    Ilse ;)

  • Hallo $Var,

    ist scheinbar was anderes.
    Ich schau nochmal genau nach.

    Eine Frage noch:

    Wie kann ich mit _ChooseColor()
    die Farbe des Controls ändern?
    _ChooseColor() ;$Label

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    #include <array.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <Misc.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>

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

    Global $_Grafik
    Global $_GrafikOeffnen

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    $_Grafik = GUICtrlCreateMenu ('Grafik')
    $hOeffnen = GUICtrlCreateMenuItem ('Öffnen', $_Grafik)
    $Label = GUICtrlCreateLabel("Text",20,20)

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

    GUISetState(@SW_SHOW)

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

    Global $s_Input, $i_UBound, $i_FontID = 1

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $hOeffnen
    _chooseColor()

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

    EndSwitch

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


    WEnd

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

    Func _fonts()
    Msgbox(0,"","")
    $s_Input = $i_FontID
    $a_Font = _ChooseFont ( )

    endfunc

    [/autoit]

    Grüße
    Ilse ;)

  • So,

    diese Version verursacht den Fehler

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    #include <array.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <Misc.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>

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

    Global $_Grafik,$a_Font,$s_Input,$a_FontData
    Global $_GrafikOeffnen,$a_FontData[1][7],$aFarbwert

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    $_Grafik = GUICtrlCreateMenu ('Grafik')
    $hOeffnen = GUICtrlCreateMenuItem ('Öffnen', $_Grafik)
    $Label = GUICtrlCreateLabel("Text",20,20)

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

    GUISetState(@SW_SHOW)

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

    Global $s_Input, $i_UBound, $i_FontID = 1

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $hOeffnen
    ;_chooseColor()
    _fonts()

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

    EndSwitch

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


    WEnd

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

    Func _fonts()
    If @error Then
    return
    endif
    Msgbox(0,"","Funktion")
    $s_Input = $i_FontID
    $a_Font = _ChooseFont ($a_FontData[$s_Input][6],$a_FontData[$s_Input][3],$aFarbwert )

    endfunc

    [/autoit]


    Grüße
    Ilse ;)

    EDIT: Code $Vars angepasst

    Oscar

    Sorry, Oscar kommt nicht wieder vor.
    ...es geht mir nur um das Abfangen von Fehlern.
    Also wie kann ich bei einem Fehler eine Meldung ausgeben.

    3 Mal editiert, zuletzt von Ilse (13. August 2012 um 17:12)

    • Offizieller Beitrag

    Ilse, bitte vermeide Doppelposts! Wenn Du noch etwas hinzufügen willst, bearbeite Deinen Beitrag!

    Natürlich verursacht das Skript einen Fehler. Das Array $a_FontData ist ja gar nicht definiert.
    Das ist als Beispielskript völlig ungeeignet. Bitte poste das komplette Skript!