2009-07-24 1 views
6

Ho visto diverse domande sull'uscita da uno script dopo che un'attività è stata completata con successo, ma c'è un modo per fare lo stesso per uno script che ha fallito? Sto scrivendo uno script di test che controlla solo che una telecamera funzioni correttamente. Se il primo test fallisce, è più che probabile che anche i seguenti test falliscano; quindi, voglio che il primo errore invochi un'uscita e fornisca l'output sullo schermo facendomi sapere che c'è stato un errore.exit script non riuscito run (python)

Spero che questa informazione sia sufficiente; fammi sapere se sono necessari ulteriori dettagli per aiutarmi.

+0

Stai parlando di test che utilizzano il modulo unittest? – bstpierre

+0

No, il mio script python sta effettivamente chiamando un programma C++, che esegue i test. Nel caso in cui la fotocamera non sia accesa o l'obiettivo sia acceso, la sceneggiatura non risponde molto bene. Voglio che il mio script smetta di provare se è il caso. Potrebbero esserci altri ostacoli che ostacolano i test, quindi mi piacerebbe progettare il mio script in modo tale che qualsiasi errore provochi la chiusura dello script. –

risposta

19

Stai cercando la funzione exit()?

import sys 

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

L'(opzionale) parametro exit() è il codice di ritorno lo script tornerà alla shell. Di solito i valori diversi da 0 segnalano un errore.

+0

il mio script è simile al seguente: import sys prova: # funzione loop ... rilancio SystemExit eccezione: print 'errore' sys.exit() #fairly ridondante a causa della precedente istruzione raise Il sollevare il sistema impone allo script di interrompere l'esecuzione con o senza errori. Quindi, quando lo tolgo e esco da sys.exit(), consente l'esecuzione dell'intero script e segnala che si è verificato un errore. Come posso usare la risposta per aiutare? Sono un nuovo utente python. Cosa intendi se 1 <0? Dovrebbe rappresentare una condizione, e sto solo leggendo troppo in esso? Grazie ancora –

+0

'se 1 <0' era solo un esempio per una condizione di errore, nel qual caso si vorrebbe interrompere l'ulteriore esecuzione. Non sono proprio sicuro di quale sia esattamente il tuo aiuto: 'print' stampa un messaggio di errore e' sys.exit() 'esce dallo script, non è tutto ciò che deve fare? Cosa vorresti lavorare in modo diverso? Perché cercare una soluzione più complicata se uno semplice fa tutto ciò che è necessario? – sth

+0

Penso che il mio problema è che non so come definire gli errori che potrebbero verificarsi. La parte eccedente dell'istruzione try non funziona nel modo in cui mi aspettavo che ...(riconosci qualsiasi errore e rispondi di conseguenza) –

3

È possibile utilizzare sys.exit() per uscire. Tuttavia, se il codice più in alto rileva l'eccezione SystemExit, non verrà chiuso.

1

È possibile generare eccezioni per identificare le condizioni di errore. Il tuo codice di primo livello può catturare tali eccezioni e gestirle in modo appropriato. È possibile utilizzare sys.exit per uscire. Per esempio, 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

Grazie per la risposta. Posso fare qualcosa di simile che fermerebbe lo script indipendentemente da quale sia l'errore? Se è così, come posso configurarlo? –

+0

Sicuro. Puoi catturare un'eccezione di livello superiore come StandardError o Exception oppure puoi catturare tutto con "tranne:". –

0

Si vuole controllare il codice di ritorno del programma C++ è in esecuzione, e l'uscita se indica il fallimento. Nel codice seguente,/bin/false e/bin/true sono programmi che escono rispettivamente con i codici di errore e di successo. Sostituiscili con il tuo programma.

Questo presuppone che il programma in esecuzione esca con zero in caso di successo, diverso da zero in caso di errore.