2016-12-21 18 views
-2

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

+0

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

+0

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

+0

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. –

Antwort

0

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 + "'") 
0

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 „

0

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.

+0

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. –

+1

@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

0

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) 
+2

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

Verwandte Themen