
Работа со строковыми данными часто требует их приведения к числовым типам. В Python основным способом преобразования строки в целое число является встроенная функция int(). Она принимает строку, содержащую цифры, и возвращает соответствующее значение типа int. Например, выражение int("42") вернёт число 42.
Если строка содержит пробелы, символы новой строки или табуляции, необходимо использовать метод strip() перед преобразованием: int(" 15\n".strip()). Это важно для данных, получаемых из внешних источников – файлов, сетевых запросов, пользовательского ввода – где формат ввода часто не гарантирован.
Функция int() также может принимать второй аргумент – систему счисления. Например, int("1A", 16) вернёт 26, а int("101", 2) – 5. Это позволяет работать с шестнадцатеричными, двоичными и другими числовыми форматами без дополнительных библиотек.
Если строка содержит некорректные символы или не может быть интерпретирована как целое число, int() вызовет исключение ValueError. Чтобы избежать сбоев, преобразование следует оборачивать в блок try...except или использовать предварительную валидацию с помощью методов isdigit(), lstrip('-').isdigit() и других логических проверок.
Как использовать функцию int() для преобразования строки
Функция int() принимает строку в качестве аргумента и возвращает соответствующее ей целое число. Она полезна, когда нужно преобразовать числовые значения, полученные из пользовательского ввода или внешних источников, к типу int для дальнейших вычислений.
Основной синтаксис: int(строка). Пример:
число = int("42")
Если строка содержит недопустимые символы (например, буквы), будет сгенерировано исключение ValueError. Чтобы избежать ошибки, рекомендуется предварительно проверять строку:
s = "123abc"
if s.isdigit():
число = int(s)
else:
print("Неверный формат")
Функция int() поддерживает второй аргумент – основание системы счисления (от 2 до 36). Это позволяет преобразовывать строки, представляющие числа в других системах счисления:
двоичное = int("1010", 2) # 10
восьмеричное = int("17", 8) # 15
шестнадцатиричное = int("1F", 16) # 31
Чтобы преобразовать строку с пробелами, сначала используйте strip():
s = " 99\n"
число = int(s.strip())
Пустая строка вызовет ValueError, поэтому проверка if s.strip(): обязательна при работе с непредсказуемыми данными.
Что произойдет, если строка содержит нечисловые символы

При попытке преобразовать строку с нечисловыми символами в целое число с помощью функции int(), Python вызовет исключение ValueError. Например, вызов int(«123abc») приведет к ошибке, поскольку подстрока «abc» нарушает числовой формат.
Даже наличие пробелов внутри строки, как в «12 34», вызывает ошибку. Пробелы допускаются только по краям строки, и то – если они не разделяют символы числа. Строка » 42 « успешно преобразуется, а «4 2» – нет.
Частая ошибка – использование запятых в качестве разделителей разрядов, например: «1,000». Такой формат в Python недопустим. Чтобы обойти это ограничение, используйте предварительную очистку строки: int(«1,000».replace(«,», «»)).
Если строка содержит символы алфавита, спецсимволы или пунктуацию, предварительная проверка обязательна. Пример безопасного преобразования:
def safe_to_int(s):
if s.isdigit():
return int(s)
raise ValueError("Недопустимый формат строки")
Для обработки сложных случаев, например строк вроде «42\n» или «\t123», можно использовать метод strip() перед int():
int(s.strip())
Надежная обработка ввода требует либо регулярных выражений, либо точечной фильтрации допустимых символов перед конверсией. Игнорирование этих шагов чревато падением программы.
Как обработать ошибку ValueError при преобразовании
При попытке преобразовать строку в целое число с помощью int(), Python вызывает исключение ValueError, если строка не соответствует формату целого числа. Это происходит, например, при передаче пустой строки, букв, символов или чисел с плавающей точкой.
Чтобы избежать аварийного завершения программы, используйте конструкцию try-except:
user_input = "42a"
try:
number = int(user_input)
except ValueError:
print("Ошибка: невозможно преобразовать строку в целое число")
Если требуется продолжить выполнение с безопасным значением, можно задать значение по умолчанию:
def parse_int(value, default=0):
try:
return int(value)
except ValueError:
return default
result = parse_int("abc") # вернёт 0
Для предварительной фильтрации данных используйте метод str.isdigit(), если допускаются только положительные целые:
value = "123"
if value.isdigit():
number = int(value)
else:
print("Недопустимый ввод")
Если нужно обрабатывать отрицательные числа, используйте регулярные выражения:
import re
def is_valid_integer(s):
return re.fullmatch(r"-?\d+", s) is not None
if is_valid_integer("-45"):
number = int("-45")
Обработка ValueError необходима при работе с пользовательским вводом, чтением из файлов и API. Никогда не полагайтесь на то, что строка уже соответствует числовому формату – всегда проверяйте или ловите исключение.
Как преобразовать строку с пробелами и управляющими символами
Перед преобразованием строки в целое число необходимо удалить все пробелы и управляющие символы, такие как \n, \t, \r. В противном случае функция int() вызовет исключение ValueError.
Для очистки строки используйте метод strip(), который удаляет пробелы и управляющие символы по краям:
s = " \t\n 123 \r\n"
n = int(s.strip())
Если в строке встречаются пробелы внутри числа, например "1 234", strip() не поможет. Такие случаи требуют удаления всех пробельных символов с помощью replace() или re.sub():
import re
s = "1 234\n"
clean = re.sub(r"\s+", "", s)
n = int(clean)
re.sub(r"\s+", "", s) удаляет все пробелы, табуляции и переводы строк, независимо от их положения в строке.
Проверку на допустимость преобразования можно выполнить через метод isdigit(), но он не работает, если строка содержит пробелы. В таком случае проверяйте результат после очистки:
if re.sub(r"\s+", "", s).isdigit():
n = int(re.sub(r"\s+", "", s))
При работе с пользовательским вводом всегда обрабатывайте возможные исключения через try...except, особенно если данные непредсказуемы.
Как работать с числами в строках с различными системами счисления

Для преобразования строк, представляющих числа в нестандартных системах счисления, используйте функцию int() с указанием основания системы. Например, int('1F', 16) вернёт 31, так как строка интерпретируется как шестнадцатеричное число.
Поддерживаются основания от 2 до 36. Для двоичных чисел – int('1010', 2) → 10, для восьмеричных – int('17', 8) → 15, для троичных – int('102', 3) → 11. Строка должна содержать только допустимые символы для указанного основания. Попытка интерпретировать int('1G', 16) вызовет исключение ValueError, так как ‘G’ не входит в диапазон шестнадцатеричных цифр.
Чтобы избежать ошибок, рекомендуется предварительно проверять строки регулярными выражениями. Например, для шестнадцатеричных: re.fullmatch(r'[0-9a-fA-F]+', строка).
Форматы вида '0x1A', '0b1011' и '0o77' автоматически распознаются функцией int() без указания основания: int('0x1A', 0) → 26. Основание 0 активирует автоматическое определение системы по префиксу.
Для ручного преобразования в строку из числа в другой системе счисления используйте bin(), oct() или hex(), либо функцию format(): format(255, 'x') → 'ff', format(10, 'b') → '1010'.
Если требуется произвольная система счисления (больше 36), используйте собственную реализацию с алфавитом, например, через деление и остаток: alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
Как обрабатывать пользовательский ввод перед преобразованием
Перед преобразованием строки в целое число необходимо исключить ошибки, связанные с некорректным вводом. Для этого важно выполнить несколько последовательных шагов валидации и очистки данных.
- Удалить пробелы по краям с помощью
strip(). Например," 42\n".strip()вернёт"42". - Проверить, состоит ли строка только из цифр, используя
isdigit(). Метод не работает с отрицательными числами, поэтому сначала нужно проверить знак. - Если разрешены отрицательные значения, проверь, начинается ли строка с
'-', а остальная часть – это цифры:s[1:].isdigit(). - Исключить пустые строки:
if not s– базовая проверка перед остальными шагами. - Обработать локализацию, если пользователь вводит число с пробелами или запятыми:
s.replace(' ', '').replace(',', ''). - Использовать конструкцию
try...exceptпри вызовеint(), чтобы перехватыватьValueErrorпри недопустимом вводе.
Пример безопасной обработки:
def parse_int(user_input):
s = user_input.strip().replace(' ', '')
if s.startswith('-'):
if not s[1:].isdigit():
return None
elif not s.isdigit():
return None
try:
return int(s)
except ValueError:
return None
