Тип данных Oracle REF

Для Python 2 вы хотите raw_input, а не input. Первый будет читать строку. Последний будет читать строку и попытаться выполнить ее, не рекомендуется, если вы не хотите, чтобы ваш код был поврежден человеком, который вводил данные.

Например, они могут делать что-то вроде вызовов произвольных функций, так как в следующем примере:

def sety99():
    global y
    y = 99

y = 0
input ("Enter something: ")
print y

Если вы запустите этот код под Python 2 и введите sety99(), вывод будет 99, несмотря на то, что ни в коем случае ваш код (в его нормальной поток выполнения) целенаправленно устанавливают y на что угодно, кроме нуля (он выполняет функцию, но эта функция никогда явно не вызывается вашим кодом). Причина этого в том, что вызов input(prompt) эквивалентен eval(raw_input(prompt)).

См. здесь для подробностей gory.

Имейте в виду, что Python 3 исправляет это. Функция ввода там ведет себя так, как вы ожидали.

0
задан cildoz 29 March 2019 в 13:40
поделиться