Python 3.4.3 KeyboardInterrupt работает, но не запускает код внутри своего блока

Я делаю несколько руководств по Python, чтобы попытаться узнать как можно больше о языке, и у меня есть некоторые проблемы с обработкой исключений. Я запускаю код в cmd в Windows 10, используя Python 3.4.3. В частности, блок KeyboardInterrupt вообще ничего не печатает при нажатии Ctrl+C. Хотя это не обязательно важно, я думаю о случаях, когда мне может понадобиться выполнить другие действия с KeyboardInterrupt, такие как запись в файл.

def process_input(input_value):
    try:
        float_value = float(input_value)
    except ValueError:
        raise ValueError("\n'%s' is not a number." % input_value)

    if float_value <= 0:
        raise ValueError("\nMeasurements must be positive values.")

    return float_value


def get_dims(*names):
    dims = []

    for n in names:
        raw_input = input("Please enter a %s : " % n)
        processed_input = process_input(raw_input)
        dims.append(processed_input)

    return dims


def main():
    print("\nThis program will request a length, width, and height and\n will" \
     "return the total volume for a box.\n")

    success = False
    try:
        length, width, height = get_dims('Length', 'Width', 'Height')
        success = True
    except ValueError as e:
        print(e)
    except KeyboardInterrupt:
        print("\nInterrupted.")

    if success:
        volume = length * width * height
        print("\nThe volume of the box is %.2f" % volume)

if __name__ == '__main__':
    main()

Вместо вывода сообщения «Прервано», при нажатии Ctrl+C во время первого пользовательского ввода вывод выглядит так: Please enter a Length : Traceback (most recent call last):

Я в Windows 10, запускаю код в cmd. Есть идеи?


person smkarber    schedule 07.02.2016    source источник
comment
Какова вся ваша продукция?   -  person xrisk    schedule 07.02.2016
comment
Не могу воспроизвести, работает как задумано для меня.   -  person xrisk    schedule 07.02.2016
comment
Может быть актуально - stackoverflow.com/questions/4606942/   -  person xrisk    schedule 07.02.2016
comment
Я закрыл это как дубликат этого вопроса; в то время как этот вопрос начинается с другой ситуации, он сводится к той же причине, которая заключается в том, что при нажатии CTRL-C выдается input(), что вызывает видимую трассировку стека, которая затем прерывается KeyboardInterrupt. «Решением» было бы попробовать/исключить EOFError и немного подождать.   -  person poke    schedule 07.02.2016
comment
Фу. Я извиняюсь. Я прочитал 5 или 6 вопросов по KeyboardInterrupt и ни разу не видел этого. Другие не удовлетворили мою проблему, но этот определенно удовлетворил. Спасибо!   -  person smkarber    schedule 07.02.2016
comment
Не нужно извиняться, это определенно странная проблема, и, честно говоря, этот вопрос не так просто найти. Но я рада, что тебе помогло! :)   -  person poke    schedule 07.02.2016