2009-02-12 13 views
5

Perché il codice non è simile al seguente catch CTRL-C?Perché KeyboardInterrupt non funziona in python?

MAXVAL = 10000 
STEP_INTERVAL = 10 

for i in range(1, MAXVAL, STEP_INTERVAL): 
    try: 
     print str(i) 
    except KeyboardInterrupt: 
     break 

print "done" 

La mia aspettativa è - se viene premuto CTRL-C mentre il programma è in esecuzione, KeyboardInterrupt si suppone di lasciare il circuito. Non è così.

Qualsiasi aiuto su cosa sto facendo male?

+0

Funziona per me su Windows, Python 2.5 – jfs

+1

non ci hai detto cosa succede invece! l'interrupt è ignorato o interrompe il programma senza stampare il "done"? – hop

risposta

15

Sembra che il programma sia stato eseguito dopo che il controllo di tempo è stato colpito, ma il tuo sistema operativo non ha ancora finito di mostrarti tutto l'output. .

0

Si interrompe il ciclo e stampa "completato".

1

Funziona.

Sto usando Ubuntu Linux e tu? Provalo di nuovo usando qualcosa come MaxVal = 10000000

+0

Lo sto eseguendo su Windows. – user63503

+0

Capisco. Non si sta interrompendo quando è in esecuzione in Pythonwin (Python IDE). Si interrompe perfettamente se chiamato dalla riga di comando. Quindi sembra che sia un problema con Pythonwin. – user63503

12

flusso codice è il seguente:

  1. for afferra nuovo oggetto dalla lista (generata da range) e imposta i ad esso
  2. try
  3. print
  4. risalgono al 1

Se quando premi CTRL-C nella parte 1, si trova all'esterno dello try/except, quindi non rileverà l'eccezione.

Prova a modificare:

MaxVal = 10000 
StepInterval = 10 

try: 
    for i in range(1, MaxVal, StepInterval): 
     print i 
except KeyboardInterrupt: 
    pass 

print "done" 
0

ho avuto questo stesso problema e ho appena scoperto quale fosse la soluzione:

Si sta eseguendo questo codice in un IDE come PyCharm. L'IDE sta prendendo ctrl + c (tastierainterrupt) come copia. Prova a eseguire il codice nel terminale.

Problemi correlati