2015-10-04 5 views
-2

Я играл со строками, и я обнаружил, что когда один вводит строку в функцию ввода, она дает ошибку.Как получить строковое значение в качестве недопустимого?

Мне было интересно, как print "invalid", если строка была введена для переменной input. Я хочу сделать это самым простым способом, и функция должна быть входной, а не raw_input, и я не хочу использовать try или except, потому что это усложнит код, который я планирую создать.

testing_variable = input ("enter a number:") 
# if a string is entered print invalid 
if testing_variable == "": 
# the "" is what im using if a string is entered and im having a hard time solving this 
#Tips or advice of any coversion of the input would be helpful 
    print "invalid" 
+0

FYI in python3 input() совпадает с raw_input() в python2 – shafeen

+0

Я не понимаю, как что-то еще может быть более ясным и менее сложным, чем try/except for conversion. 'int()' должен терпеть неудачу, если задано нецелое число, а способ обхода сообщений в Python передается через исключения; каждый другой путь более сложный, – msw

ответ

2

Python 2.7 поддерживает input и raw_input.

Итак, с input вы должны будете обернуть свой ввод кавычками. Если вы хотите этого избежать, используйте raw_input.

Пример с raw_input:

>>> raw_input('hi ') 
hi hey 
'hey' 

Если вы хотите, чтобы заставить пользователя всегда вводить цифры, то вы можете обернуть его в попытке/кроме как таковой:

try: 
    i = int(raw_input("Enter a number: ")) 
except: 
    print("you did not enter a number") 
+0

yeap Мне было интересно, есть ли способ конвертировать строку при вводе в функцию ввода для недопустимого –

+0

, это только для raw_input, потому что я хотел показать, введен ли строка в входная переменная, чтобы показать недопустимый –

+0

Да. Потому что с raw_input все будет строкой. Даже если вы предоставляете номер. Он будет сохранен как строка. Поэтому вам нужно сделать правильную обработку, чтобы проверить, что это такое. – idjaw

1

Этот это лучший способ, на мой взгляд:

testing_variable = input ("enter a number:") 
try: 
    number_var = int(testing_variable) 
    print(number_var) 
except ValueError: 
    print("Invalid") 

без использования попробовать вы можете сделать:

testing_variable = input ("enter a number:") 
if not testing_variable.isdigit(): 
    print("Invalid") 
+0

я знаю, но я предпочитаю не использовать try и, кроме как есть какой-либо другой способ? –

+0

Извините, попробуйте и за исключением, но это более простой и правильный способ. – naimetti

+0

Есть ли способ проверить, является ли ввод буквой, а затем выводится неверно вместо оператора ошибки? –

2

Использование функции 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, чтобы узнать, работает ли она.

+0

, также существует способ ввода только чисел, в то время как любая введенная буква должна отображаться неверно, но с функцией input() –

+0

Невозможно проверить, что пользователь типы в запрос 'input()', прежде чем Python попытается интерпретировать его как выражение Python. Они могут вводить что-то вроде 'x + 5', и если у вас есть переменная' x', определенная со значением, которое вы можете добавить 5, оно будет работать. Если нет, это вызовет исключение. Если вы хотите сделать полезную проверку, используйте 'raw_input'! Другого пути нет. – Blckknght

Смежные вопросы