
Метод isdigit() относится к строковым методам Python и применяется для проверки каждого символа строки на принадлежность к категории десятичных цифр. Он возвращает логическое значение True, если все символы являются цифрами от 0 до 9 и строка не пуста. В противном случае результатом будет False.
Особенность isdigit() заключается в том, что он учитывает не только стандартные арабские цифры, но и символы из других письменностей, которые классифицируются в Unicode как десятичные. Например, строка «²» (символ степени) не пройдет проверку, а символ «٣» из арабского алфавита будет распознан как цифра.
В отличие от метода isnumeric(), который распознает также дробные и римские числа, isdigit() работает строже и подходит для случаев, когда нужно убедиться именно в десятичных цифрах. Это делает его полезным для фильтрации пользовательского ввода, валидации идентификаторов или при обработке строк перед конвертацией в целые числа с помощью int().
Проверка строковых значений на цифры

Метод str.isdigit() возвращает True, если каждый символ строки относится к категории «цифра» в Юникоде. Это не только символы от 0 до 9, но и, например, арабские или римские цифры в цифровом представлении.
Пример:
"123".isdigit() # True
"٢٣٤".isdigit() # True (арабские цифры)
"Ⅳ".isdigit() # True (римская цифра)
"12.3".isdigit() # False (точка не является цифрой)
"-5".isdigit() # False (минус – отдельный символ)
Для проверки только десятичных цифр используйте str.isdecimal(). Если требуется исключить знаки или разделители, рекомендуется предварительно нормализовать строку с помощью методов strip() и replace(), а затем применять проверку.
Для конвертации строки в число лучше использовать int() с обработкой исключений. Такой способ позволяет корректно работать с отрицательными значениями и дополнительными символами:
try:
num = int(value)
except ValueError:
# значение не является целым числом
Таким образом, isdigit() подходит для фильтрации символов, но для строгой проверки числовых данных надёжнее комбинировать его с другими методами или использовать преобразование типов.
Различие между isdigit, isnumeric и isdecimal

isdecimal() возвращает True только для десятичных цифр 0–9. Применим для проверки строк, которые должны содержать исключительно символы стандартной десятичной системы счисления. Пример: "123".isdecimal() → True, "²".isdecimal() → False.
isdigit() охватывает более широкий диапазон, включая надстрочные и подстрочные цифры, а также символы из других наборов Юникода, обозначающие числа. Пример: "²".isdigit() → True, хотя это не десятичное число. Подходит для задач, где важно выявить любые цифровые символы, а не только десятичные.
isnumeric() учитывает всё, что представляется числом: дроби, римские цифры, специальные числовые знаки. Пример: "Ⅻ".isnumeric() → True, "½".isnumeric() → True. Этот метод уместен при работе с данными, где возможны нетрадиционные числовые записи.
Практический выбор: isdecimal() – строгая проверка для числовых строк в десятичной системе; isdigit() – более гибкая проверка цифровых символов; isnumeric() – для максимально широкого охвата числовых обозначений.
Работа метода с пробелами и символами пунктуации

Метод isdigit() возвращает False, если в строке встречаются пробелы, точки, запятые, дефисы или другие знаки пунктуации, даже если рядом присутствуют цифры. Например, выражение "123 456".isdigit() даст False из-за пробела, а "3.14".isdigit() – из-за точки.
Для проверки числовых значений, содержащих разделители или пробелы, необходимо предварительно очистить строку: удалить пробелы методом replace(), либо отфильтровать допустимые символы через str.isdigit в генераторе. Если нужны проверки десятичных чисел с точкой или запятой, то следует использовать float() с обработкой исключений или метод str.replace() перед вызовом.
Рекомендация: применять isdigit() только для строк, которые гарантированно содержат исключительно символы от '0' до '9'. Для более гибких сценариев лучше комбинировать очистку строки и преобразование в число.
Особенности проверки Юникод-символов
Метод isdigit() учитывает не только арабские цифры 0–9, но и множество других символов из таблицы Unicode. Это может приводить к результатам, которые на первый взгляд кажутся неожиданными.
- Цифры из национальных систем счисления считаются валидными: например, деванагари
५(U+096B) или арабско-индийская цифра٣(U+0663). - Символы типа «²» (U+00B2) или «⑦» (U+2466) не проходят проверку, так как относятся к категории «числовые символы», но не к «десятичным цифрам».
- Некоторые редкие блоки Unicode содержат цифры для исторических систем письма, которые тоже будут возвращать
True.
Практические рекомендации:
- Для строгой проверки только ASCII-цифр используйте дополнительную проверку:
string.isdigit() and string.isascii(). - Если необходимо поддерживать все международные десятичные цифры, полагайтесь на
isdigit()без ограничений. - Для различения «числовых символов» и «цифр» применяйте методы
isnumeric()иisdigit()в связке.
Типичные ошибки при использовании isdigit

Многие ожидают, что isdigit() подходит для проверки чисел в пользовательском вводе. Однако ввод часто содержит пробелы, разделители, знаки или символы форматирования. Так, строка " 42" или "42\n" не пройдет проверку, пока не будет очищена с помощью strip().
Еще один подводный камень – символы Юникода. Метод считает цифрами не только 0–9, но и, например, китайский иероглиф «〇» или арабские цифры «١٢٣». Это может привести к неожиданным результатам при обработке данных, где допустимы только стандартные арабские цифры. В таких случаях лучше использовать проверку через регулярные выражения ^[0-9]+$.
Ошибка также возникает при проверке чисел с плавающей точкой. Строка "3.0" не является «цифровой» в понимании isdigit(). Для валидации чисел с разделителями нужно использовать преобразование в float внутри блока try-except или специализированные функции парсинга.
При работе с отрицательными числами isdigit() полностью бесполезен, так как знак «−» всегда приводит к False. Для таких случаев лучше проверять строку вручную или использовать метод lstrip('-').isdigit(), если допустим только один ведущий минус.
Практические примеры фильтрации пользовательского ввода

Метод isdigit() позволяет проверять, состоит ли строка полностью из цифр, что удобно для обработки числовых данных. Например, при запросе возраста пользователя можно использовать цикл проверки:
age = input("Введите ваш возраст: ")
while not age.isdigit():
age = input("Ошибка! Введите число: ")
age = int(age)
Для фильтрации телефонных номеров, где допускаются только цифры без разделителей, isdigit() помогает сразу отбрасывать строки с буквами и символами:
phone = input("Номер телефона: ")
if phone.isdigit() and len(phone) == 10:
print("Номер принят")
else:
print("Введите 10 цифр без пробелов и символов")
При обработке идентификаторов клиентов в базе данных метод позволяет исключить любые некорректные записи перед сохранением:
client_id = input("Введите ID клиента: ")
if client_id.isdigit():
save_to_db(int(client_id))
else:
print("ID должен содержать только цифры")
Если требуется фильтрация нескольких значений из строки, можно использовать генератор списков с isdigit() для извлечения всех корректных чисел:
data = input("Введите числа через пробел: ")
numbers = [int(x) for x in data.split() if x.isdigit()]
print("Отфильтрованные числа:", numbers)
Метод isdigit() также полезен при проверке данных из внешних источников, например CSV-файлов, чтобы предотвратить запись некорректных значений в числовые поля.
Вопрос-ответ:
Что делает метод isdigit в Python?
Метод isdigit проверяет, состоят ли все символы строки из цифр. Если каждый символ строки является числом от 0 до 9, метод возвращает True, в противном случае — False. Например, строка «123» вернёт True, а «12a3» — False.
Метод isdigit работает с отрицательными числами или числами с десятичной точкой?
Нет, метод isdigit учитывает только отдельные цифры. Символы минуса «-» или точки «.» не считаются цифрами, поэтому строка «-123» или «3.14» вернёт False.
Можно ли использовать isdigit для проверки строк на наличие чисел в других системах счисления?
Метод isdigit ориентирован на стандартные десятичные цифры. Он не распознаёт символы, представляющие числа в других системах, например «A» в шестнадцатеричной системе. Для таких случаев нужно применять дополнительные функции или преобразования.
Как isdigit отличается от метода isnumeric?
Методы isdigit и isnumeric похожи, но isnumeric распознаёт больше символов, связанных с числами, например цифры в других алфавитах и дробные индексы. isdigit ограничен только обычными десятичными цифрами, поэтому некоторые символы, которые isnumeric считает числом, isdigit может отвергнуть.
Можно ли использовать isdigit для обработки пользовательского ввода чисел в программе?
Да, метод часто применяют для проверки, ввёл ли пользователь число, прежде чем преобразовать строку в целое число через int(). Однако нужно учитывать, что отрицательные числа или числа с десятичной точкой метод распознавать не будет, поэтому иногда приходится дополнять проверку дополнительной логикой.
