Почему KeyboardInterrupt не работает в Python? - PullRequest
6 голосов
/ 13 февраля 2009

Почему код не похож на следующий перехват CTRL-C?

MAXVAL = 10000
STEP_INTERVAL = 10

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

print "done"

Мое ожидание - если CTRL-C нажата во время работы программы, KeyboardInterrupt должен выйти из цикла. Это не так.

Любая помощь в том, что я делаю неправильно?

Ответы [ 5 ]

17 голосов
/ 13 февраля 2009

Похоже, что программа выполняется к тому времени, когда было нажато control-c, но ваша операционная система не завершила показывать вам все выходные данные. .

14 голосов
/ 13 февраля 2009

поток кода выглядит следующим образом:

  1. for захватывает новый объект из списка (сгенерированный range) и устанавливает для него i
  2. try
  3. print
  4. вернуться к 1

Если вы нажмете CTRL-C в части 1, она выйдет за пределы try / except, поэтому исключение не будет обнаружено.

Попробуйте вместо этого:

MaxVal = 10000
StepInterval = 10

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

print "done"
2 голосов
/ 22 февраля 2018

У меня была такая же проблема, и я только что узнал, каково было решение:

Вы запускаете этот код в IDE, такой как PyCharm. Среда IDE принимает Ctrl + C (клавиатурное прерывание) в качестве копии. Попробуйте запустить свой код в терминале.

1 голос
/ 13 февраля 2009

Работает.

Я использую Ubuntu Linux, а вы? Проверьте это снова, используя что-то вроде MaxVal = 10000000

0 голосов
/ 13 февраля 2009

Вырывается из цикла и печатает «готово».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...