Полезно ли когда-либо использовать вход Python 2 вместо raw_input?
номер
input()
оценивает код, который дает пользователь. Он предоставляет всю мощь Python в руки пользователя. С помощью выражений генератора / списочных представлений, __import__
и операторов if/else
буквально все, что может сделать Python, может быть достигнуто с помощью одного выражения. Вредоносные пользователи могут использовать input()
для удаления файлов (__import__('os').remove('precious_file')
), monkeypatch остальной части программы (setattr(__import__('__main__'), 'function', lambda:42)
), ... что угодно.
Обычному пользователю не нужно использовать все расширенные функции. Если вам не нужны выражения, используйте ast.literal_eval(raw_input())
- функция literal_eval
безопасна.
Если вы пишете для опытных пользователей, дайте им лучший способ ввода кода. Плагины, пользовательские модули и т. Д. - с полным синтаксисом Python, а не только с функциональностью.
Если вы абсолютно уверены, что знаете, что делаете, скажите eval(raw_input())
. eval
кричит "Я опасен!" на тренированный глаз. Но, скорее всего, вам это никогда не понадобится.
input()
была одной из старых ошибок проектирования, которые исправляет Python 3.