Datei öffnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Die Verwendung von sys.exit ist sinnvoll bei Programmen, die von anderen Programmen als separate Prozesse aufgerufen werden, und an diese einen Statuscode zurück geben sollen. Konkrete Anwendungsfälle dafür können in der System-Administration liegen. Ansonsten bedarf es keines Aufrufs von sys.exit. Alle diesbezüglichen Beispiele, deren Anwendungen *nicht* mit einem externen Prozess auf genau diese Art und Weise kommunizieren, sind schlicht falsch.
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Ok Ich danke euch :)
Eine Vision ohne Aktion bleibe eine Illusion
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Hey Leute Ich hätte doch nochmal eine kleine Frage:

Pseudocode:

Code: Alles auswählen

import logging
import sys


def logger(meldung):
    logging.basicConfig(filename='Fehler.log', filemode='w', level=logging.DEBUG, format='%(asctime)s %(message)s')
    logging.error(meldung)


def main():
    try:
        f = open("doesnotexist")
    except FileNotFoundError:
        pfad = "doesnotexist"
        logger(f"({pfad},ist nicht vorhanden")
        ´


if __name__ == "__main__":
    main()

Auch wenn hier viele geschrieben haben das die meisten sys.exist sehr selten benötigt haben hätte erneut eine abschließende Frage zu dem Thema mal angenommen Ich lasse o.g Skript Täglich laufen ( mit dem Aufgabenplaner) ohne try und except würde die Fehlermeldung nach oben prallen und das skript mit exit code 1 beenden alles soweit ok.Ich möchte diesen Fehler nun aber loggen wie würde Ich das den alternative sonst machen wenn Ich nun nicht nach den logger nicht sys.exit(1) aufrufe ? Ich meine sonst würde von dem Skript Exit Code 0 zurückgegeben werden und der Aufgabenplaner würde denken das alles ordnungsgemäß ausgeführt wurde und würde eventuell gar nicht die Maßnahmen die beim Aufgabenplaner hinterlegt sind ausführen ( zum Beispiel probier es jedes halbe Stunde erneut ....) Würdet ihr hier also sys.exit(1) benutzen oder nicht?
Eine Vision ohne Aktion bleibe eine Illusion
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

Du möchtest nur loggen und ansonsten das Verhalten nicht ändern? Ein raise am Ende des except-Blocks reicht die Exception weiter.
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Ach natürlich Ich Idiot stimmt Ich danke dir sparrow.Und ja kommt das so nicht häufig vor das man eventuell nicht alle Fehler abfangen kann dafür aber aber alles versucht zu loggen ?
Eine Vision ohne Aktion bleibe eine Illusion
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

Doch klar.
Das kann man so machen, also mit dem raise, oder man schaut, ob man das losging viel weiter oben setzt. Man könnte den Aufruf von main kapseln und dort alle Fehler loggen, die auftreten und dann mit raise weiter reichen
Antworten