Was ist eine empfohlene Methode, um alle Ausnahmen in einem Python-Skript zu behandeln, um es vor dem Absturz zu schützen? Soll ich den ganzen Code in "try ... except" schreiben? Gibt es andere, weiseere Wege?Verhindern, dass ein Python-Skript abstürzt
Antwort
Ja, um sicherzustellen, dass es verlässt anmutig können Sie jedoch
try:
your code
except:
print("Uh oh!")
tun, seien Sie vorsichtig, da Fehler nicht vollständig zum Schweigen zu bringen, damit der Benutzer weiß, dass etwas schief gegangen ist, so dass Sie es beheben . Möglicherweise möchten Sie die Fehlermeldung sogar ausdrucken.
try:
your code
except Exception as err:
print("Uh oh, please send me this message: '" + err + "'")
Handhabung/Abfangen aller Ausnahmen ist ein Python Antipattern. Check this out
https://realpython.com/blog/python/the-most-diabolical-python-antipattern/
"Der folgende Code ist eine der selbstzerstörerischen Dinge ein Python-Entwickler schreiben kann:"
try:
do_something()
except:
pass
edit:
warum nicht zu schreiben except Exception
"Es gibt Varianten, die auf ein und dieselbe Sache hinauslaufen - wie zum Beispiel" ausgenommen Ausnahme: "oder" außer Ausnahme wie e: ". Sie alle tun den gleichen massiven schlechten Dienst: still und Fehlerbedingungen unsichtbar versteckt, die sonst schnell erkannt werden kann und versandt „
Sie können meine vollständige Erklärung siehe here,
aber ich würde stark fördert die Verwendung von. , bei der sehr Minimum:
import traceback
import datetime
while True:
try:
# your code
except:
with open("exceptions.log", "a") as log:
log.write("%s: Exception occurred:\n" % datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
traceback.print_exc(file=log)
für kleine Skripte dies ausreichend sein sollte, für größere Skripte, würde ich empfehlen, Pythons eingebaute in logging mit, die al bietet mehr Kraft für wenig zusätzliche Arbeit.
IMHO ist das nicht immer der beste Weg zu gehen. Ich hatte einen Kollegen, der diese Art von Sachen in einer Flask Web App machte. Nur seine Logging-Konfiguration war durcheinander, so dass die Ausnahmen verschwanden.Die beste Lösung war, alle Versuche zu entfernen: außer: Blöcke, die er um alles herumgewickelt hatte * und Flask stattdessen die Exception-Protokollierung behandeln ließ, was sehr gut war, zusätzlich zur Rückgabe des korrekten Statuscodes (500) an den Browser. –
@AlexGRice Das ist großartig, wenn Sie Flask verwenden. Ich stelle auch fest, dass dies in der Regel eine schlechte Idee ist, aber wenn Sie es tun müssen, ist dies der richtige Weg. – TemporalWolf
Probieren und außer definitiv
try:
print('This code be running') # your code here
except Exception as e:
print('This code NOT be running because of', e)
Bitte verwenden Sie hier keine Schimpfwörter. SO sollte wie eine professionelle Ressource mit einer Sprache behandelt werden, die am Arbeitsplatz angemessen wäre. – skrrgwasme
- 1. Verhindern, dass Federstapel abstürzt
- 2. Verhindern, dass der node.js-Prozess bei einem MySQL-Abfragefehler abstürzt
- 3. NodeJS: Verhindern, dass die Anwendung bei einem Fehler abstürzt
- 4. Wie kann ich verhindern, dass mein Selenium/Python-Programm abstürzt?
- 5. Verhindern, dass Knoten bei nicht genügend Arbeitsspeicher abstürzt
- 6. Wie kann ich verhindern, dass ein Calloc-Fehler mein Programm abstürzt?
- 7. Verhindern, dass ein Combo herunterfällt
- 8. Sicherzustellen, dass das Bibliotheksprojekt nicht abstürzt
- 9. Highcharts - verhindern, dass Kreisdiagramme ein Liniendiagramm überlagern?
- 10. Verhindern, dass ein ContextMenu einmal ausgeblendet wird
- 11. Verhindern, dass numpy ein mehrdimensionales Array erstellt
- 12. Verhindern, dass ein Akkordeon in JavaFX kollabiert
- 13. Wie kann ich verhindern, dass meine App nach der Kameraaufnahme abstürzt?
- 14. Was bewirkt, dass opencv_traincascade.exe beim Einlesen negativer Samples abstürzt?
- 15. Verhindern, dass in MATLAB
- 16. Verhindern, dass ein Besucher ein Bild von meiner Site speichert
- 17. JavaScript: Wie verhindere ich, dass ein Benutzer das setInterval/setTimeout-Ereignis abstürzt?
- 18. Verhindern, dass src neu lädt
- 19. Verhindern, dass Benutzer Benachrichtigungen verwerfen
- 20. Verhindern, dass Validierungsattribute in Modell
- 21. Verhindern, dass UISearchBarController UINavigationBar zeigt
- 22. iframe verhindern, dass Eltern Standort
- 23. Verhindern, dass ReagenthreadlySetInnerHTML clientseitig aufruft
- 24. Verhindern, dass BitmapDecoder SystemOutOfMemoryException verursacht
- 25. verhindern erwarten, dass auf EOF
- 26. Verhindern, dass NSURLSession Antworten zwischenspeichert
- 27. Verhindern, dass Google Charts heranzoomt
- 28. Haselnussfäden verhindern, dass TomEE aufhört
- 29. CURLOPT_NOBODY kann nicht gesetzt werden, ohne dass curl_exec abstürzt.
- 30. Verhindern, dass CSS überschrieben wird
Hängt davon ab, warum es abstürzt. Der try ... catch ermöglicht es Ihnen, eleganter zu enden ... Wenn das Skript beispielsweise eine Ausnahme nicht richtig abfängt, sollte es dies tun. – AlG
Es gibt keinen magischen allgemeinen "retten vor Absturz" -Code, den Sie anwenden können, um jeden Fehler zu beheben, der Ihren Code zum Absturz bringen würde. Wir würden alle lieben, dass so etwas existiert, aber das Programmieren ist nicht so einfach. – user2357112
In meiner Antwort unten verlinke ich auf einen Artikel, der erklärt, warum alles in einem Versuch verpackt: außer: Block ist eine schlechte Idee, weil es verschiedene andere Probleme innerhalb Ihrer Skriptlogik verbergen kann (kann/kann). Die Ausnahmebehandlung sollte spezifischer sein. Wenn es eine unbehandelte Ausnahme gibt, wird die Python-Laufzeit standardmäßig die Ausnahme und Stacktrace ausgeben - was normalerweise der Fall ist. –