Raw_input для python 3.6 [duplicate]

Убедитесь, что вы используете привязку, чтобы получить компонентные реквизиты в REACT

class FileUploader extends Component {
  constructor (props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
  }
   onChange=(e,props)=>{
    const files = e.target.files;
    const selectedFile = files[0];
    ProcessFileUpload(selectedFile,props.ProgressCallBack,props.ErrorCallBack,props.CompleatedCallBack,props.BaseURL,props.Location,props.FilesAllowed);
  }
   handleClick = () => {
    this.refs.fileUploader.click();
  }
  render()
  {
  return(
      <div>
        <button type="button" onClick={this.handleClick}>Select File</button>  
        <input type='file' onChange={(e)=>this.onChange(e,this.props)} ref="fileUploader" style={{display:"none"}} />
      </div>)
  }
}
407
задан Martijn Pieters 2 May 2016 в 17:36
поделиться

9 ответов

raw_input() был переименован в input()

Из http://docs.python.org/dev/py3k/whatsnew/3.0.html

754
ответ дан SilentGhost 15 August 2018 в 15:29
поделиться
  • 1
    Первоначально был вход функции (), который действовал как текущий eval (input ()). Это был остаток от того, когда Python был менее осведомлен о безопасности. Изменение упростило язык. См. Также & quot; import this & quot; для более глубокого объяснения. Вы предпочли бы, чтобы мертвый язык развивался? Их много. – meawoppl 10 April 2014 в 00:13
  • 2
    Я также изучаю python и нашел одно отличие между input() и raw_input(). a = input() примет пользовательский ввод и поместит его в правильный тип. Например: если пользовательский тип 5, то значение в a является целым числом 5. a = raw_input() будет принимать пользовательский ввод и помещать его как строку. Например: если пользовательские типы 5, то значение в a является строкой '5', а не целым числом. Думал, что это может быть хорошая информация для новичков в питоне, подобных мне. – Vishnu Narang 5 March 2016 в 13:22
  • 3
    @VishnuNarang Yep, это правильно в Python 2. Но в Python 3 это поведение изменилось, и ввод делает то, что raw_input сделал в Python 2. – balpha♦ 5 March 2016 в 13:25
  • 4
    @balpha: Просто проверено. Ты прав. У меня есть python 2.7 (Не могу отредактировать ответ, чтобы упомянуть об этом ...) – Vishnu Narang 5 March 2016 в 13:35
  • 5
    @meawoppl Переход от python от 2 до 3 был предназначен для взлома. Это не значит, что это должно быть. Язык может развиваться без смерти и без изменения сигнатуры функции. Это помогает, если у вас нет глобальных функций. Начните с некоторых задним числом с других языков. И т. Д. Извлечение функций также не выполняется. – dlamblin 25 September 2017 в 07:17

Вот фрагмент кода, который я ввел в мои скрипты, который я не буду запускать в среде py2 / 3-agnostic:

# Thank you, python2-3 team, for making such a fantastic mess with
# input/raw_input :-)
real_raw_input = vars(__builtins__).get('raw_input',input)

Теперь вы можете использовать real_raw_input. Это довольно дорого, но коротко и легко читаемо.

Теоретически вы можете даже назначить raw_input вместо real_raw_input, но могут быть модули, которые проверяют существование raw_input и ведут себя соответственно. Лучше остаться на безопасной стороне.

5
ответ дан ChewbaccaKL 15 August 2018 в 15:29
поделиться
  • 1
    Get ('raw_input', input) TypeError: аргумент vars () должен иметь атрибут dict – Surest Texas 16 May 2016 в 23:00

Переход между 2.x и 3.x не слишком экстремален, но он меняет некоторые вещи. raw_input теперь просто вводится, если вы хотите использовать старый вход, просто выполните:

eval(input())

Так что просто забудьте raw:)

-1
ответ дан Cleve Green 15 August 2018 в 15:29
поделиться

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

def raw_input(x):
  input(x)

Затем, когда я запускаю raw_input('Enter your first name: ') на сценарий, над которым я работал, он захватывает его, как input().

Возможно, причина не в том, чтобы я этого не обнаружил!

1
ответ дан Danijel-James W 15 August 2018 в 15:29
поделиться

Это работает в Python 3.x и 2.x:

# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))
91
ответ дан geoffspear 15 August 2018 в 15:29
поделиться
  • 1
    При этом я получал проблему scope . Исправлена ​​ошибка с global input в верхней части вызывающей функции. – kevlar1818 14 August 2013 в 20:00
  • 2
    Мне это кажется немного чище: import __builtin__; input = getattr(__builtin__, 'raw_input', input) – mbarkhau 3 October 2013 в 17:29
  • 3
    Python 3 не имеет модуля с именем __builtin__. – Cees Timmerman 4 October 2013 в 13:06
  • 4
    @mbarkhau: он слишком глобальный. Что делать, если вы вызываете библиотеку, которая этого не ожидает? __builtin__ переименовывается в builtins в Python 3. Оба доступны как __builtins__ в CPython. – jfs 25 March 2014 в 21:00
  • 5
    getattr(__builtins__, 'raw_input', input) возвращает значение по умолчанию при импорте в Python 2.7.2. – Cees Timmerman 26 March 2014 в 10:55

Решение Timmerman отлично работает при запуске кода, но если вы не хотите получать ошибки Undefined name при использовании pyflakes или аналогичного linter, вы можете использовать следующее:

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass
6
ответ дан jmagnusson 15 August 2018 в 15:29
поделиться
  • 1
    – Babken Vardanyan 9 August 2014 в 08:08
  • 2
    @BabkenVardanyan pylint, как известно, является строгим, когда дело доходит до стиля кода. Я бы порекомендовал flake8 или pyflakes, чтобы не принимать во внимание весь ваш день с бессмысленными предупреждениями. – jmagnusson 11 August 2014 в 10:02

В Python 3.xx вам просто нужно input() not raw_input()

13
ответ дан Pulkit Goyal 15 August 2018 в 15:29
поделиться

Надежным способом решения этой проблемы является

from six.moves import input

six - это модуль, который исправляет многие из 2/3 общих точек боли в кодовой базе.

31
ответ дан tacaswell 15 August 2018 в 15:29
поделиться
13
ответ дан Weeble 15 August 2018 в 15:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: