2009-02-12 33 views
5

¿Por qué no se codifica como el siguiente CTRL-C?¿Por qué KeyboardInterrupt no funciona en python?

MAXVAL = 10000 
STEP_INTERVAL = 10 

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

print "done" 

Mi expectativa es - si se presiona CTRL-C, mientras que el programa se está ejecutando, KeyboardInterrupt se supone que salir del bucle. No es asi.

¿Alguna ayuda sobre lo que estoy haciendo mal?

+0

Funciona para mí en Windows, Python 2.5 – jfs

+1

¡no nos dijiste qué sucede! ¿se ignora la interrupción o detiene el programa sin imprimir el "hecho"? – hop

Respuesta

15

Suena como si el programa estuviera listo para el momento en que control-c ha sido golpeado, pero su sistema operativo no ha terminado de mostrarle toda la salida. .

0

Se sale del lazo e imprime "hecho".

1

Funciona.

Estoy usando Ubuntu Linux, ¿y usted? Pruébelo de nuevo usando algo como MaxVal = 10000000

+0

Lo estoy ejecutando en Windows. – user63503

+0

Ya veo. No está interrumpiendo cuando se ejecuta en Pythonwin (Python IDE). Interrumpe perfectamente si se llama desde la línea de comando. Parece que es un problema con Pythonwin. – user63503

12

flujo de código es como sigue:

  1. for toma nuevo objeto de la lista (generado por range) y establece i a ella
  2. try
  3. print
  4. volver a 1

If pulsa CTRL-C en la parte 1 está fuera del try/except, por lo que no detectará la excepción.

Tal vez puedas probar:

MaxVal = 10000 
StepInterval = 10 

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

print "done" 
0

que estaba teniendo este mismo problema y acabo de descubrir cuál era la solución:

Usted está ejecutando este código en un IDE como PyCharm. El IDE está tomando ctrl + c (keyboardinterrupt) como copia. Intenta ejecutar tu código en la terminal.

Cuestiones relacionadas