Я думал, что смогу наконец-то извлечь пользу из цикла while / try / Кроме того, но столкнулся с проблемой. Моя задача состоит в том, чтобы получить компьютерные номера запросов от пользователя, пока не будет введено «0» После этого введенные номера будут добавлены. Моя проблема в том, что часть «Исключение» не перехватывает нечисловые записи. Если вводится нечисловая запись, я получаю обычное сообщение об ошибке, которое останавливает программу. Вот что происходит, когда я ввожу 3 числа, а четвертая запись - «м»:
on win32
Type "copyright", "credits" or "license()" for more information.
>>>
RESTART: C:/Users/Username/Documents/CISPROG1/Homework 5/Homework5.1.SumGenerator.py
Enter 1st element (or type '0' to finish).
1
Enter 2nd element (or type '0' to finish).
2
Enter 3rd element (or type '0' to finish).
3
Enter 4th element (or type '0' to finish).
m
Traceback (most recent call last):
File "C:/Users/Username/Documents/CISPROG1/Homework 5/Homework5.1.SumGenerator.py", line 24, in <module>
+ "%s element (or type '0' to finish). \n" % suffix()))
decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>]
>>>
Я думал, что это будет "TypeError", но это не ловит его. Фактически, даже тип ошибки «Исключение» не ловит его. Как мне поймать нечисловой ввод? Я думаю, что проблема как-то связана с тем, как Python обрабатывает нецифровый ввод для типа Decimal.
Вот моя программа:
from decimal import *
#start:
lInputSequence = []
i = 1
def suffix():
if i%10 == 1 and i != 11:
return "st"
elif i%10 == 2 and i != 12:
return "nd"
elif i%10 == 3 and i != 13:
return "rd"
else:
return "th"
decInputElement = 1
while True:
decInputElement = Decimal(input("Enter " + str(i)
+ "%s element (or type '0' to finish). \n" % suffix()))
try:
if decInputElement == 0:
break
else:
lInputSequence.append(decInputElement)
i = i+1
except TypeError:
print("Please enter a number.")
print(lInputSequence)
print("The sum of these %s elements is %s" % (len(lInputSequence),sum(lInputSequence)))
#end