Использование функции input
в Python 2, как правило, плохая идея. Он эквивалентен eval(raw_input())
и, следовательно, ожидает, что пользователь будет вводить действительное выражение Python. Если они вводят что-то недопустимое Python, вы всегда получите сообщение об ошибке.
Хотя вы могли поймать различные исключения и перевести их в полезные сообщения об ошибках, лучше использовать raw_input
и выполнить собственную проверку для определенных типов ввода, которые вы хотите обрабатывать. Если вы хотите только принимать номера, попробуйте преобразовать строку, которую вы получаете от raw_input
, до int
или float
(и перехват ValueError
исключений, которые указывают нечисловой ввод). Для вашего желаемого результата печати "invalid"
:
try:
result = int(raw_input("enter a number"))
except ValueError:
print "invalid"
Это самый Pythonic способ решить эту проблему. Если по какой-то причине вы не хотите использовать обработку исключений, вы можете сохранить строку, которую вы получаете от raw_input
, и проанализировать ее сначала, чтобы убедиться, что она имеет только символы, которые вы ожидаете, прежде чем преобразовать их в число. Для базовых 10 целых чисел, это не слишком сложно, поскольку нужно только цифры должны быть проверены на, а isdigit
метод на строке будет проверять, если он содержит только цифры Charaters:
str_input = raw_input("enter a number")
if str_input.isdigit():
result = int(str_input)
else: # string contains non-digit characters
print "invalid"
Это совсем немного сложнее по подтверждению входную строку, если вы хотите поддерживать числа с плавающей запятой, поскольку нет удобной функции, такой как isdigit
, которая проверит все символы для вас. Вы могли бы сделать это, если бы действительно захотели, но я настоятельно рекомендую перейти к стилю исключающего кода исключения, показанному выше, и просто передать строку float
, чтобы узнать, работает ли она.
FYI in python3 input() совпадает с raw_input() в python2 – shafeen
Я не понимаю, как что-то еще может быть более ясным и менее сложным, чем try/except for conversion. 'int()' должен терпеть неудачу, если задано нецелое число, а способ обхода сообщений в Python передается через исключения; каждый другой путь более сложный, – msw