2009-02-12 7 views
5

Pourquoi ne code pas comme le suivant CTRL-C?Pourquoi KeyboardInterrupt ne fonctionne pas en python?

MAXVAL = 10000 
STEP_INTERVAL = 10 

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

print "done" 

Mon attente est - si CTRL-C est enfoncée alors que le programme est en cours d'exécution, KeyboardInterrupt est censé quitter la boucle. Ce ne est pas.

Toute aide sur ce que je fais mal?

+0

Cela fonctionne pour moi sur Windows, Python 2.5 – jfs

+1

vous ne nous avez pas dit ce qui se passe à la place! l'interruption est-elle ignorée ou arrête-t-elle le programme sans imprimer le "fait"? – hop

Répondre

15

On dirait que le programme est fait par le contrôle du temps-c a été atteint, mais votre système d'exploitation n'a pas fini de vous montrer toute la sortie. .

0

Il sort de la boucle et imprime "terminé".

1

Cela fonctionne. J'utilise Ubuntu Linux, et vous? Testez-le à nouveau en utilisant quelque chose comme MaxVal = 10000000

+0

Je l'utilise sous Windows. – user63503

+0

Je vois. Il ne s'interrompt pas lors de l'exécution en Pythonwin (IDE Python). Il interrompt parfaitement s'il est appelé depuis la ligne de commande. On dirait que c'est un problème avec Pythonwin. – user63503

12
flux de code

est comme suit:

  1. for saisit nouvel objet de la liste (générée par range) et définit i lui
  2. try
  3. print
  4. Retournons à 1

Si vous frappez CTRL-C dans la partie 1, il est en dehors du try/except, donc il ne sera pas attraper l'exception.

Essayez ceci:

MaxVal = 10000 
StepInterval = 10 

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

print "done" 
0

J'avais ce même problème et je viens de découvrir ce qui était la solution:

Vous exécutez ce code dans un IDE comme PyCharm. L'IDE prend ctrl + c (keyboardinterrupt) comme copie. Essayez d'exécuter votre code dans le terminal.

Questions connexes