2009-06-04 21 views
5

Quale comando si usa in python per terminare un programma?Terminare un programma Python

ovvero l'equivalente di "end" in basic, o "quit" in BASH.

Vedo che "break" ti porta fuori da un loop, e "quit" è tutto legato a roba di "classe" che non comprendo ancora. ho provato

import sys 
sys.exit() 

ma visualizzerà errore seguente:

Traceback (most recent call last): 
    File "C:\Documents and Settings\....\Desktop\current file_hand\Python_1.py", line 131, in <module> 
    sys.exit() 
SystemExit 

v'è alcuna soluzione per esso.

+0

Stai usando Python in modo interattivo? Dal prompt >>>? O eseguendo una sceneggiatura? –

+0

Potrebbe esserci un IDE - IDLE o ActivePython - che cattura tutto, dal momento che eseguono gli script in-process. –

risposta

10

sys.exit (error_code)

error_code sarà 0 per un'uscita normale, 1 o qualche altro numero positivo per un'uscita a causa di un errore di qualche tipo, ad esempio l'utente ha inserito i parametri errati.

sys.exit() "non è definito su alcune architetture", (anche se ha funzionato quando l'ho provato sulla mia macchina Linux!)

Il official python docs spiega questo più pienamente.

È un'ottima idea che tutti i programmi e gli script seguano la convenzione di restituzione.

Ad esempio se si esegue uno script che acquisisce alcuni dati da un database; restituendo 0 e nessun output, significa che il database è perfettamente a posto, non c'è niente (o niente che corrisponda alla tua query). restituire 1 e nessun output significa che c'è un errore nel database, l'intero processo dovrebbe interrompersi, perché continuare a corrompere anche l'altro sistema.

1

Provare a eseguire un interprete Python fuori dall'IDE. Nella mia installazione di Windows la semplice riga di comando python.exe, entrambe le opzioni funziona:

>>> import sys 
>>> sys.exit() 

o

>>> raise SystemExit 
10

sys.exit() solleva l'eccezione SystemExit.

Se non si rileva tale eccezione, il programma termina.

Dal momento che stai ricevendo che la produzione, non sono sicuro di quello che sta accadendo, ma credo che volete prendere tutte le eccezioni e la stampa da soli:

try: 
    ... 
except: 
    print exception somehow 
    raise 

Se questo è il caso, don' Lo faccio. prendere Exception invece:

... 
    except Exception: 
     ... 

In questo modo non si prenderà le cose non destinate ad essere catturato (come SystemExit).

+0

Questo vale per Python 2.5+. Tuttavia, SystemExit eredita da Exception in Python 2.4 e versioni precedenti. – Miles

+0

Non catturare mai 'Exception' nel codice di gestione degli errori, invece cattura' StandardError', da cui ereditano tutte le eccezioni di errore (dal momento che almeno v2.0: http://docs.python.org/release/2.0/lib/module- exceptions.html). – RobM

2

import sys

sys.exit (0)

7

Si dovrebbe anche prendere in considerazione alternative di uscire direttamente.Spesso return funziona altrettanto bene se si avvolge codice in una funzione. (Meglio, infatti, perché evita sys.exit() stranezza.)

def main(): 
    ...do something... 
    if something: 
     return    # <----- return takes the place of exit 
    ...do something else... 

main() 
+2

+1 sull'utilizzo di una dichiarazione di ritorno. Usare un'istruzione return (con o senza un valore restituito) significa che il tuo programma python può essere utilizzato da una sessione interattiva o come parte di qualche altro script. Sono molto irritato dagli script che chiamano sys.exit e mi scaricano dall'interprete Python. –

+0

+1: Non uso mai sys.exit me stesso. – nosklo

1

Nel tuo caso, l'errore è probabile che si dispone di una nuda eccetto il blocco che sta prendendo piede l'eccezione SystemExit, in questo modo:

import sys 
try: 
    sys.exit(return_code) 
except: 
    pass 

il modo corretto per risolvere il problema è quello di rimuovere il eccezione: parte, e invece solo intercettare le eccezioni ci si aspetta di essere possibilmente sollevato. Per esempio:

try: 
    # Code which could raise exceptions 
except (NameError, ValueError): 
    # Do something in case of NameError or ValueError, but 
    # ignore other exceptions (like SystemExit) 

Tuttavia, se si voleva davvero il vostro programma per uscire, il seguente codice funziona:

import os 
try: 
    os._exit(return_code) 
except: 
    pass 

questo modo si uscirà anche con la eccezione: clausola, in quanto solo direttamente chiama la funzione C con lo stesso nome che uccide il tuo processo. Questo è sconsigliato a meno che non si sappia cosa si sta facendo, dal momento che questo non chiama gestori di cleanup o svuota i buffer IO aperti.

2
sys.exit() #to exit the program 
return  #to exit from a function 
Problemi correlati