Python 3에서 raw_input을 사용하는 방법


553
import sys
print(sys.platform)
print(2**100)
raw_input()

Python 3.1을 사용하고 있으며 raw_inputdos 팝업을 "고정"시킬 수 없습니다 . 내가 읽고있는 책은 Python 2.5 용이며 Python 3.1을 사용하고 있습니다.

이 문제를 해결하려면 어떻게해야합니까?


1
흠, NameError가 발생합니다. 코드를 사용하려고 할 때 name 'raw_input'이 정의되지 않았습니다. 당신은 동일하지 않습니다?
SilentGhost


9
파이썬 3에는 많은 변화가 있었으므로 2.5 (실제로 오래된) 책을 사용하여 마스터해서는 안됩니다.
Niklas B.

5
raw_input을은 파이썬 3에서 입력 이름이 바뀌 었습니다
krystan 명예

답변:


1011

Python 3부터 raw_input()로 이름이 변경되었습니다 input().

에서 의 새로운에서 파이썬 3.0, 내장 매크로 섹션 번째 항목.


56
원래는 현재 eval (input ())과 같은 역할을하는 input () 함수가있었습니다. 파이썬이 보안을 덜 의식했을 때부터 남은 것입니다. 변경으로 언어가 단순화되었습니다. 자세한 설명은 "이 항목 가져 오기"를 참조하십시오. 진화하는 언어보다 죽은 언어를 선호합니까? 주변에 많은 사람들이 있습니다.
meawoppl

9
나뿐만 아니라 파이썬을 배우고 사이에 한 가지 차이점을 발견 해요 input()raw_input(). a = input()사용자 입력을 받아 올바른 유형으로 입력합니다. 예를 들어, 사용자가 5를 입력하면 in의 값 a은 정수 5 a = raw_input()입니다. 사용자 입력을 받아서 문자열로 넣습니다. 예 : 사용자가 5를 입력하면 in의 값 a은 정수가 아닌 문자열 '5'입니다. 파이썬과 같은 초보자에게 좋은 정보 일 수 있다고 생각했습니다.
비슈누 나랑

10
@VishnuNarang Yep, 그것은 파이썬 2에서 옳습니다. 그러나 파이썬 3에서는 이런 행동이 바뀌었고 입력은 파이썬 2에서 raw_input이 한 일을합니다.
balpha

4
@balpha : 방금 확인했습니다. 당신이 올바른지. 나는 (... 그 언급하는 대답을 편집 할 수 없습니다) 파이썬 2.7이
비슈누 나랑

3
@meawoppl 파이썬 2에서 3으로 옮기는 것은 깨지기위한 것이 었습니다. 꼭 그래야하는 것은 아닙니다. 언어는 죽지 않고 함수 서명을 바꾸지 않고 진화 할 수 있습니다. 전역 기능이없는 경우 도움이됩니다. 다른 언어의 약간의 통찰력으로 시작하십시오. 기타 기능 제거도 테이블에서 해제되지 않습니다.
dlamblin

117

이것은 Python 3.x 및 2.x에서 작동합니다.

# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))

4
이 방법 으로 범위 문제 가 발생했습니다 . global input호출 기능 상단에 a 로 수정했습니다 .
kevlar1818 년

1
이것은 나에게 약간 깨끗해 보인다 : import __builtin__; input = getattr(__builtin__, 'raw_input', input)
mbarkhau

3
Python 3에는라는 모듈이 없습니다 __builtin__.
Cees Timmerman

@ mbarkhau : 너무 글로벌입니다. 예상치 못한 라이브러리를 호출하면 어떻게됩니까? 파이썬 3에서 __builtin__로 이름이 바뀌 었습니다 builtins. 둘 다 __builtins__CPython 에서처럼 사용할 수 있습니다 .
jfs

3
getattr(__builtins__, 'raw_input', input)Python 2.7.2에서 가져올 때 기본값을 반환합니다.
Cees Timmerman

45

이를 해결하는 신뢰할 수있는 방법은

from six.moves import input

6 개 는 2/3 개의 공통 코드 기반 문제점을 패치하는 모듈입니다.


1
좋은 생각입니다 ... 그리고 그렇게하면 스크립트를 from six.moves import input as raw_input유지 raw_input하고 두 Python 버전을 모두 사용하여 실행할 수 있습니다.
eddy85br

15

다른 사람들이 지적했듯이, raw_input함수는 inputPython 3.0에서 이름이 바뀌 었으며 최신 책을 통해 더 잘 제공 될 것이지만 스크립트의 출력을 볼 수있는 더 좋은 방법이 있다는 것을 지적하고 싶습니다 .

귀하의 설명에서, 귀하는 Windows를 사용하고 있다고 생각하고 .py파일을 저장 한 다음 파일을 두 번 클릭하여 실행합니다. 프로그램이 종료 되 자마자 팝업되는 터미널 창이 닫히므로 프로그램 결과를 확인할 수 없습니다. 이 문제를 해결하려면 사용자가 enter를 누를 때까지 raw_input/ input문을 추가하는 것이 좋습니다 . 그러나 앞에서 본 것처럼 프로그램의 오류와 같은 문제가 발생하면 해당 명령문이 실행되지 않고 무엇이 잘못되었는지 확인할 수 없으면 창이 닫힙니다. 명령 프롬프트 또는 IDLE을 사용하는 것이 더 쉬울 수 있습니다.

명령 프롬프트 사용

Python 프로그램이 포함 된 폴더 창을 볼 때 Shift 키를 누른 상태에서 창의 흰색 배경 영역을 마우스 오른쪽 단추로 클릭하십시오. 팝업되는 메뉴에는 "Open command window here"항목이 포함되어 있어야합니다. (이것은 Windows Vista 및 Windows 7에서 작동한다고 생각합니다.) 그러면 다음과 같은 명령 프롬프트 창이 열립니다.

    Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

    C:\Users\Weeble\My Python Program>_

프로그램을 실행하려면 다음을 입력하십시오 (스크립트 이름 대체).

    python myscript.py

... 그리고 Enter를 누르십시오. ( "python"이 인식되는 명령이 아니라는 오류가 발생 하면 http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96을 참조 하십시오. ) 프로그램 실행이 완료되면 완료 여부에 관계없이 창 다른 명령을 입력 할 수 있도록 계속 열려 있고 명령 프롬프트가 다시 나타납니다. 프로그램을 다시 실행하려면 파일 이름을 매번 입력 할 필요없이 위쪽 화살표를 눌러 입력 한 이전 명령을 불러오고 Enter 키를 눌러 다시 실행할 수 있습니다.

유휴 사용

IDLE은 Python과 함께 제공되는 간단한 프로그램 편집기입니다. 다른 기능들 중에서도 창에서 프로그램을 실행할 수 있습니다. .py파일을 마우스 오른쪽 버튼으로 클릭 하고 "IDLE에서 편집"을 선택하십시오. 프로그램이 편집기에 나타나면 F5를 누르거나 "Run"메뉴에서 "Run module"을 선택하십시오. 프로그램은 프로그램 종료 후 열린 상태로 실행되며 Python 명령을 입력하여 즉시 실행할 수 있습니다.


IDLE이 Windows와 함께 설치됩니까? 터미널에서 유휴 또는 유휴를 실행하면 비어 있습니다.
vgoff

1
IDLE은 Windows에서 Python과 함께 설치됩니다. 시작 메뉴의 바로 가기와 .py 파일의 파일 연결로 표시되지만 기본적으로 경로에 '유휴'명령이 추가되어 있다고 생각하지 않습니다. 명령 행에서 시작하려면 다음을 실행하십시오.pythonw -m idlelib.idle
Weeble

그것은 그것을 설명합니다. 저는 OS가 아닌 돈을 벌기 위해 Windows 만 터치합니다. 그런 다음 "Use IDLE"섹션이 바이어스된다고 말하고 싶습니다. 아마도 선택성을 언급해야합니다.
vgoff

3
잘 모르겠습니다. 질문은 Windows에만 국한되었습니다. "DOS 팝업"에 대해 이야기합니다. IDLE은 Python의 일부로 설치되지만 일부 배포자는 분리 할 수 ​​있습니다. 예를 들어 우분투에서는 별도의 패키지로 설치해야합니다. 대답은 이미 질문자가 요청한 것과 다른 접근 방식을 제안하므로 더 이상 접선을 추가하지 않겠습니다. FWIW 저는 집에서 Linux를 사용하고 업무를 수행해야하는 Windows 만 사용합니다.
Weeble

DOS는 1981 년에서 1995 년 사이 또는 부분적으로 DOS 기반 Microsoft Windows 버전 95, 98 및 Millennium Edition을 포함하여 약 2000 년까지 IBM PC 호환 시장을 지배 한 밀접하게 관련된 여러 운영 체제의 약자입니다.
vgoff

7

Timmerman의 솔루션은 코드를 실행할 때 훌륭하게 작동하지만 Undefined namepyflakes 또는 유사한 린터를 사용할 때 오류가 발생 하지 않으려면 다음을 대신 사용할 수 있습니다.

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass

어, 난 여전히 pylint의 오류를 많이 얻고있다 : Redefining built-in 'input' (redefined-builtin), Unable to import '__builtin__' (import-error), Invalid constant name "input" (invalid-name).
Babken Vardanyan

@BabkenVardanyan pylint는 코드 스타일과 관련하여 매우 엄격합니다. 내가 추천 할 것 flake8또는 pyflakes그렇게하지에 관한 의미 경고와 함께 모든 일을 차지합니다.
jmagnusson

6

다음은 py2 / 3 불가지론 환경에서 실행하고 싶지 않은 스크립트에 넣은 코드입니다.

# 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을 사용할 수 있습니다. 꽤 비싸지 만 짧고 읽을 수 있습니다. 원시 입력을 사용하는 것은 일반적으로 시간이 많이 걸리므로 (입력 대기 중) 중요하지 않습니다.

이론적으로 real_raw_input 대신 raw_input을 할당 할 수도 있지만 raw_input의 존재를 확인하고 그에 따라 동작하는 모듈이있을 수 있습니다. 안전한 곳에 머무르는 것이 좋습니다.


나는 그것을 시도했을 때 이것을 얻는다 : inputcons = vars ( builtins ) .get ( 'raw_input', input) TypeError : vars () 인수는 dict 속성을 가져야 한다

0

아마도 가장 좋은 해결책은 아니지만 여기에 오기 전에 연구를 중단하지 않고 작업을 계속하기 위해 즉시 작업했습니다.

def raw_input(x):
  input(x)

그런 다음 raw_input('Enter your first name: ')작업중 인 스크립트를 실행할 때 처럼 스크립트를 캡처합니다 input().

내가 아직 오지 않았기 때문에 이것을하지 않는 이유가있을 수 있습니다!


7
왜 안돼 raw_input = input?
tonypdmtr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.