Подтвердить что ты не робот

Как проверить, является ли переменная целой или строкой?

У меня есть приложение, имеющее пару команд. Когда вы вводите определенную команду, вам нужно ввести дополнительную информацию о чем-то/кого-то. Теперь информация должна быть строго целым числом или строкой, в зависимости от ситуации.

Однако, что бы вы ни вводили в Python с использованием raw_input(), на самом деле это строка, независимо от того, что более конкретно, как бы я мог быстро и без попытки... кроме того, если переменная состоит из цифр или символов?

4b9b3361

Ответ 1

По-моему, у вас есть два варианта:

  • Просто попробуйте преобразовать его в int, но поймайте исключение:

    try:
        value = int(value)
    except ValueError:
        pass  # it was a string, not an int.
    

    Это подход Ask Forgiveness.

  • Явно проверяю, есть ли в строке только цифры:

    value.isdigit()
    

    str.isdigit() возвращает True только в том случае, если все символы в строке являются цифрами (0 - 9).

    эквивалент типа unicode/Python 3 str unicode.isdecimal()/str.isdecimal(); только десятичные числа Unicode могут быть преобразованы в целые числа, так как не все цифры имеют фактическое целочисленное значение (U + 00B2 SUPERSCRIPT 2 - это цифра, но не десятичная, например).

    Это часто называют подходом к разрешению запроса или просмотром перед вами.

Последний не будет обнаруживать все допустимые значения int(), так как пробелы и + и - также допускаются в значениях int(). Первая форма с радостью примет ' +10 ' как число, последнее не будет.

Если вы ожидаете, что пользователь обычно вводит целое число, используйте первую форму. Легче (и быстрее) попросить прощения, а не разрешения в этом случае.

Ответ 2

если вы хотите проверить, что это такое:

>>>isinstance(1,str)
False
>>>isinstance('stuff',str)
True
>>>isinstance(1,int)
True
>>>isinstance('stuff',int)
False

если вы хотите получить ints из raw_input

>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
   except: pass

>>>isinstance(x,int)
True

Ответ 4

Не проверять. Идем дальше и предположим, что это правильный вход, и поймаем исключение, если оно не является.

intresult = None
while intresult is None:
    input = raw_input()
    try: intresult = int(input)
    except ValueError: pass

Ответ 5

В зависимости от вашего определения в ближайшее время вы можете использовать один из следующих вариантов:

  • try: int(your_input); except ValueError: # ...
  • your_input.isdigit()
  • используйте regex
  • используйте parse, который является видом противоположности format