Funktionsübergreifende FehlerCodeRückgabe

  • Hallo liebe Leute,

    ich verwende derzeit AutoIt 3.3.16.1 mit SciTE4AutoIt 4.4.6 (32 Bit) auf Windows 7 Pro SP1 (64 Bit).

    Warum "verschluckt" hier Funktion _Eins() den FehlerCode aus Funktion _Drei() im Gegensatz zur Funktion _Zwei(), die ihn erneut setzt?

    Code: SciTE-Ausgabe Eins
           Zurück Fehler
    _Eins:   -1     0
    _Zwei:   -1     1

    Soll das so sein, ist das ein Fehler oder mache ich etwas falsch?

    Übrigens, wenn ich statt obigem ConsoleWrite()-Block

    AutoIt: Alternativer ConsoleWrite-Block
    ConsoleWrite(@CRLF & '_Eins:')
    ConsoleWrite(@CRLF & 'Zurück: ' & _Eins())
    ConsoleWrite(@CRLF & 'Fehler: ' & @Error)
    ConsoleWrite(@CRLF & '_Zwei:')
    ConsoleWrite(@CRLF & 'Zurück: ' & _Zwei())
    ConsoleWrite(@CRLF & 'Fehler: ' & @Error)
    ConsoleWrite(@CRLF & 'Ende' & @CRLF)

    schreibe, dann wird der FehlerCode auch aus Funktion _Zwei() "verschluckt":

    Code: SciTE-Ausgabe Zwei
    _Eins:
    Zurück: -1
    Fehler: 0
    _Zwei:
    Zurück: -1
    Fehler: 0
    Ende

    obwohl in der Hilfe steht:

    @error und @extended werden beim Return nicht gesetzt und bleiben so, wie sie vor dem Aufruf waren.

    Gruß, fee

  • Wenn eine benutzerdefinierte Funktion aufgerufen wird, wird @error auf 0 gesetzt (Siehe Hilfe zu SetError() )

    AutoIt
    SetError(1)
    Test()
    
    Func Test()
        ConsoleWrite(@error & @CRLF)
    EndFunc

    In deinem Fall wird die Funktion _Eins() aufgerufen, hierbei wird @error auf 0 gesetzt und damit _Eins() auch einen @error-Wert zürückgeben würde, müsste man SetError() verwenden - das fehlt in deiner Funktion _Eins() jedoch.

  • Ich nutze die Hilfe zwar sehr oft, aber für SetError() kam mir der Gedanke seltsamerweise nicht, denn ich vermutete den Fehler woanders und sah wohl den Code vor lauter Bytes nicht mehr. :rtfm:

    Vielen Dank für deine Erklärung AspirinJunkie !

  • fee 24. Juli 2023 um 07:55

    Hat das Label [ gelöst ] hinzugefügt.