Я делаю несколько руководств по 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. Есть идеи?
input()
, что вызывает видимую трассировку стека, которая затем прерываетсяKeyboardInterrupt
. «Решением» было бы попробовать/исключитьEOFError
и немного подождать. - person poke   schedule 07.02.2016