2009-07-24 8 views
6

Ich habe mehrere Fragen zum Beenden eines Skripts nach einer Aufgabe erfolgreich abgeschlossen, aber gibt es eine Möglichkeit, das gleiche für ein Skript, das gescheitert ist, zu tun? Ich schreibe ein Testskript, das nur überprüft, ob eine Kamera richtig funktioniert. Wenn der erste Test fehlschlägt, ist es mehr als wahrscheinlich, dass die folgenden Tests ebenfalls fehlschlagen; Daher möchte ich, dass der erste Fehler einen Exit aufruft und eine Ausgabe auf dem Bildschirm bereitstellt, die mich darüber informiert, dass ein Fehler aufgetreten ist.Exit fehlgeschlagen Skript ausführen (Python)

Ich hoffe, das ist genug Informationen; lassen Sie mich wissen, wenn mehr Details benötigt werden, um mir zu helfen.

+0

Sprechen Sie über Tests mit dem Unittest-Modul? – bstpierre

+0

Nein, mein Python-Skript ruft tatsächlich ein C++ - Programm auf, das die Tests ausführt. Falls die Kamera nicht eingeschaltet ist oder das Objektiv eingeschaltet ist, reagiert das Skript nicht sehr gut. Ich möchte, dass mein Skript aufhört zu versuchen, wenn beides der Fall ist. Es könnte andere Hindernisse geben, die die Tests behindern. Daher möchte ich mein Skript so gestalten, dass jeder Fehler dazu führt, dass das Skript beendet wird. –

Antwort

19

Suchen Sie einfach nach der exit() Funktion?

import sys 

if 1 < 0: 
    print >> sys.stderr, "Something is seriously wrong." 
    sys.exit(1) 

Die (optional) Parameter von exit() ist der Rückkehrcode das Skript an der Schale zurück. Normalerweise signalisieren Werte ungleich 0 einen Fehler.

+0

mein Skript sieht wie folgt aus: import sys Versuch: # Loop-Funktion ... raise Systemexit Ausnahme: print 'Fehler' sys.exit() #fairly redundante aufgrund der vorherigen Erhöhung Aussage Die Raise-System erzwingt, dass das Skript nicht mehr mit oder ohne Fehler ausgeführt wird. Wenn ich dann die sys.exit() -Funktion auslasse, wird das gesamte Skript ausgeführt, und es wird gemeldet, dass ein Fehler aufgetreten ist. Wie könnte ich Ihre Antwort verwenden, um zu helfen? Ich bin ein neuer Python-Benutzer. Was meinst du mit, wenn 1 <0? Soll es eine Bedingung darstellen, und ich lese gerade zu weit hinein? Danke nochmal –

+0

'wenn 1 <0' war nur ein Beispiel für eine Fehlerbedingung, in diesem Fall würden Sie die weitere Ausführung abbrechen wollen. Ich bin mir nicht sicher, wozu Sie genau Hilfe brauchen: 'print' druckt eine Fehlermeldung und' sys.exit() 'beendet das Skript, ist das nicht alles was es tun muss? Was möchtest du anders machen? Warum nach einer komplizierteren Lösung suchen, wenn eine einfache Lösung alles Notwendige bietet? – sth

+0

Ich denke mein Problem ist, dass ich nicht weiß, wie man die Fehler definiert, die auftreten könnten. Der Ausnahmeabschnitt der try-Anweisung funktioniert nicht so, wie ich es erwartet habe ...(Fehler erkennen und entsprechend reagieren) –

3

Sie können sys.exit() zum Beenden verwenden. Wenn jedoch ein höherer Code die Ausnahme SystemExit abfängt, wird er nicht beendet.

1

Sie können Ausnahmen auslösen, um Fehlerbedingungen zu identifizieren. Ihr Code auf oberster Ebene kann diese Ausnahmen erfassen und entsprechend behandeln. Sie können sys.exit zum Beenden verwenden. Zum Beispiel in Python 2.x:

import sys 

class CameraInitializationError(StandardError): 
    pass 

def camera_test_1(): 
    pass 

def camera_test_2(): 
    raise CameraInitializationError('Failed to initialize camera') 

if __name__ == '__main__': 
    try: 
     camera_test_1() 
     camera_test_2() 
     print 'Camera successfully initialized' 
    except CameraInitializationError, e: 
     print >>sys.stderr, 'ERROR: %s' % e 
     sys.exit(1) 
+0

Vielen Dank für Ihre Antwort. Könnte ich etwas Ähnliches tun, das das Skript unabhängig von dem Fehler stoppen würde? Wenn ja, wie richte ich das ein? –

+0

Sicher. Sie können eine Ausnahme auf höherer Ebene wie StandardError oder Exception abfangen oder Sie können alles mit 'except: 'abfangen. –

0

Sie wollen den Return-Code von der C++ Programm, das Sie ausführen, und Ausgang überprüfen, ob es Fehler anzeigt. Im folgenden Code sind/bin/false und/bin/true Programme, die mit Fehler- bzw. Erfolgscodes enden. Ersetzen Sie sie durch Ihr eigenes Programm.

Dies setzt voraus, dass das Programm, das Sie ausführen, bei Erfolg mit Null beendet wird, bei einem Fehler ungleich Null.

Verwandte Themen