Проблема в том, что, хотя вы улавливаете ошибку с помощью предложения try
/ except
, вы ничего не делаете, чтобы убедиться, что item
действительно int
.
. Разумный подход заключается в цикле, пока вход не может быть преобразован в int
, например:
import bisect
m = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("The list is:", m)
# : loop until the input is actually valid
is_valid = False
while not is_valid:
item = input("Enter element to be inserted:")
try:
item = int(item)
except ValueError:
print("Invalid!")
else:
is_valid = True
ind = bisect.bisect(m, item)
bisect.insort(m, item)
print("Item inserted at index:", ind)
print("List after insertion:", m)
Обратите внимание, что input()
всегда получает str
, а int('5.0')
также выдает ValueError
, если вы хотите обработать этот случай, используйте два try
с, например:
import bisect
m = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("The list is:", m)
is_valid = False
while not is_valid:
item = input("Enter element to be inserted:")
try:
item = int(item)
except ValueError:
try:
item = int(round(float(item)))
# or just: item = float(item) -- depends on what you want
except ValueError:
print("Invalid!")
else:
is_valid = True
else:
is_valid = True
ind = bisect.bisect(m, item)
bisect.insort(m, item)
print("Item inserted at index:", ind)
print("List after insertion:", m)