Функция input в Python: ввод строк, чисел и обработка ошибок

Функция input запрашивает строку ввода у пользователя и возвращает её в качестве результата. В функцию можно передать строку-приглашение, которая будет выведена на экран перед ожиданием ввода. Введенные данные всегда возвращаются в виде строки, даже если пользователь ввел число.

input()

input(prompt)

  • prompt (необязательный) — строка, которая будет выведена на экран перед ожиданием ввода.

Ввод чисел

Функция input всегда возвращает строку и даже если пользователь ввел число, оно будет возвращено в виде строки. Программа ниже, например, выведет на экран не сумму чисел, а склеенную строку:

a = input("Введите первое число: ")
b = input("Введите второе число: ")
print("Сумма чисел:", a + b)
Введите первое число: 2
Введите второе число: 3
Сумма чисел: 23

Если требуется работать с введенными данными как с числами, нужно явно преобразовать строку в число используя функцию int или float:

a = int(input("Введите первое число: "))
b = int(input("Введите второе число: "))
print("Сумма чисел:", a + b)
Введите первое число: 2
Введите второе число: 3
Сумма чисел: 5

Обработка ошибок ввода

Используя функцию input, вы должны быть готовы к тому, что пользователь может ввести что угодно. Например, программа ожидает ввод числа, а пользователь введет строку. В этом случае программа завершится с ошибкой:

a = int(input("Введите число: "))
Введите число: abc
ValueError: invalid literal for int() with base 10: 'abc'

Чтобы обезопасить программу от таких ошибок, можно либо проверять входные данные перед преобразованием, либо использовать конструкцию try-except, чтобы перехватить исключение и обработать его.

Проверка перед преобразованием

a = input("Введите число: ")
if a.isdigit():
    a = int(a)
    print("Число:", a)
else:
    print("Это не число")

Такая проверка, однако, не позволит вам ввести отрицательное число или число с плавающей точкой, так как метод isdigit возвращает True только для строк, состоящих из цифр, а знак минуса или точка числом не являются. Конечно, можно написать более сложную проверку, учитывающую эти нюансы, но в большинстве случаев проще использовать конструкцию try-except.

Обработка исключения

try:
    a = int(input("Введите число: "))
    print("Число:", a)
except ValueError:
    print("Это не число")

Повторный ввод при ошибке

Чтобы дать пользователю возможность ввести данные при ошибке повторно, можно использовать цикл while.

while True:
    try:
        a = float(input("Введите число: "))
        print("Число:", a)
        break
    except ValueError:
        print("Это не число")
Введите число: abc
Это не число
Введите число: 123.5
Число: 123.5

Проверка пустого ввода

Если пользователь ничего не введет и нажмет , функция input вернет пустую строку, но не False или None. Пустая строка в логическом контексте Python — это ложь, проверку на пустой ввод можно сделать так:

something = input("Введите что-нибудь: ")
if something:
    print("Вы ввели:", something)
else:
    print("Вы ничего не ввели")

raw_input и input

В версии Python 2 функция input работала иначе, чем в Python 3. В Python 2 input возвращала результат вычисления введенного выражения, а raw_input возвращала строку. В Python 3 функция input всегда возвращает строку, а функция raw_input не существует.

Если вам нужна такая же функциональность (вычисление выражений) в Python 3, можно использовать функцию eval:

a = input("Введите выражение: ")
print("Результат:", eval(a))
Введите выражение: 2 + 3
Результат: 5

Использовать eval с пользовательским вводом небезопасно, так как пользователь может ввести произвольный код, который будет выполнен. Поэтому использование eval не рекомендуется, если вы не уверены в том, что ввод пользователя не представляет угрозы.