Я пишу небольшой скрипт на Python, который нуждается в информации, передаваемой пользователем.Поскольку некоторые части моего скрипта могут вызвать исключение и, следовательно, нарушить работу скрипта, если пользовательский ввод имеет неправильный формат, я бы хотел проверить это заранее.Это полезная мера в любом случае, конечно.Для удобства пользователей я не хочу, чтобы сценарий прерывался, если ввод был в неправильном формате.Вместо этого следует задать вопрос.
Поэтому я определил функцию для каждого пользовательского ввода, которая будет проверять ввод перед переходом к следующему шагу.Эта проверка выполняется с помощью метода обработки ошибок try
, except
, чтобы убедиться, что сценарий не прерывается.
Вот минимальный пример такой функции:
def ask_for_int( prompt = "Please enter an integer:\n" ):
user_input = input( prompt ).strip()
# Check if the value can be transformed into a float
try:
return int( user_input )
except:
ask_for_int( prompt = "You need to pass an integer:\n" )
some_number = ask_for_int()
Этот код работает нормально, пока я ввожу целое число.Если я передаю ему строку, он также распознает исключение TypeException и повторно запрашивает целое число.К сожалению, однако, переменная some_number
теперь не содержит переданного мною целого числа, но она пуста.
Чтобы прояснить это, взглянем на следующее:
Давайте сначала добавим print( 'You passed the valid integer: %s' % some_number )
в конце предыдущего примера.Если мы теперь передадим, скажем, 123
приглашению, печать вернет 123
.Ура!
Однако, если мы передадим abc
, скрипт откажется от нашего ввода и запросит новый номер. Это except
, работающий здесь.Теперь давайте выполним эту задачу и фактически передадим целое число, например 321
.Печать должна вернуть 321
, конечно, потому что это целое число, которое было принято, не так ли?Ну, к сожалению, вывод равен None
.
Вот необработанный вывод:
Передача целого числа
Please enter an integer:
123
You passed the valid integer: 123
Сначала передавая строку, затем целое число
Please enter an integer:
abc
You need to pass an integer:
321
You passed the valid integer: None