Вы на правильном пути. Определение этого фрагмента кода в функции позволяет вам избегать повторений .
Но, вероятно, было бы лучше повторно спросить пользователя, пока ввод не будет действительным, чтобы вы могли полагаться на функцию, всегда возвращающую хорошее значение.
Ваша функция вернет None
после первой неудачной попытки. Тогда код снова усложняется.
Мое предложение:
def ask(prompt, datatype):
while True:
obj = input(prompt)
try:
var = datatype(obj)
return(var)
except (ValueError, IOError) as error:
print(error)
Пример:
>>> i = ask('type in an integer: ', int); print('you entered: %d' % i)
type in an integer: two
invalid literal for int() with base 10: 'two'
type in an integer: 2
you entered: 2