파이썬 3에서`raw_input ()`과`input ()`의 차이점은 무엇입니까?


362

파이썬 3 raw_input()과 차이점은 무엇입니까 input()?


3
파이썬 2와 파이썬 3을 모두 입력 할 수있는 프로그램을 어떻게 호환합니까?
Solomon Ucko

2
당신이 설정하려고 그렇게하기 inputraw_input이름 오류를 무시합니다.
Solomon Ucko

3
파이썬 2와 3 호환성에 대한 '6'라이브러리를 찾으십시오.
잭 호먼

답변:


418

차이점은 raw_input()파이썬 3.x에는 존재 input()하지 않는다는 것입니다. 사실, 이전은 raw_input()이름이 변경되었습니다 input(), 그리고 이전은 input()사라지고 있지만, 쉽게 사용하여 시뮬레이션 할 수 있습니다 eval(input()). ( eval()이것은 악한 것을 기억하십시오 . 가능하다면 입력을보다 안전하게 분석하는 방법을 사용하십시오.)


93
" raw_input... 의 차이점은 무엇입니까 ?" - "의 차이점은 없습니다 raw_input." ... 아주 큰 차이가 있습니다.
ivan_pozdeev

9
파이썬 2에서는 프로그래머가 실제로 사용자 입력을 명령으로 "실행"하기를 원한다고 생각합니다. 그러나 프로그래머가 "raw"입력을 원할 수도 있다는 것을 깨달았을 때 "raw_input"이라는 다른 함수를 설계했습니다. 파이썬 3에서 그들은 어리석은 것이 무엇인지 알았고 원래 입력 기본값의 실행을 단순히 삭제하여 하나의 간단한 함수 만 생성했습니다.
JC Rocamonde

1
다시 Py3.5.1을 실행하면 키워드로 raw_input ()이 있습니다.
OldBunny2800

2
그것은 있다고 할 필요가있다 eval(그리고 exec그들은 보안 위험이 될 수 있기 때문에) 일반적으로 피해야한다. 자세한 내용 SO 베테랑 Ned Batchelder에 의해 Eval은 실제로 위험합니다 를 참조하십시오 . 물론 그 조언은 이전 Python 2에도 적용됩니다 input.
PM 2Ring

1
@ PM2Ring 답변에 경고를 추가했습니다. 물론 eval()및에 대한 올바른 사용 사례가 exec()있지만 먼저 사용 eval()을 결정하기 전에 사용하지 않아야하는 이유를 이해해야 합니다.
Sven Marnach

192

Python 2 에서 raw_input()문자열을 반환 input()하고 입력을 Python 표현식으로 실행하려고합니다.

문자열을 얻는 것이 거의 항상 원하는 것이기 때문에 Python 3은 input(). 스벤이 말했듯이 오래된 행동을 원한다면 eval(input())효과가 있습니다.


7
파이썬 3에는없는 것이 추가되어야한다 raw_input().
Martin Thoma

파이썬 표현식으로 입력을 사용하는 것은 무엇입니까?
Akshay Vijay Jain

1
@AkshayVijayJain, 아마도 숫자를 입력하기위한 것입니다. 그러나 완전히 안전하지 않습니다.
MarSoft

112

파이썬 2 :

  • raw_input() 사용자가 입력 한 내용을 그대로 받아 문자열로 다시 전달합니다.

  • input() 먼저 raw_input() 를 수행 한 다음 수행합니다 eval().

가장 큰 차이점은 input()구문 적으로 올바른 파이썬 문장 을 기대 한다는 것 raw_input()입니다.

파이썬 3 :

  • raw_input() 로 이름이 변경되었습니다 input() 으므로 이제 input()정확한 문자열을 반환합니다.
  • 낡은 input() 것이 제거되었습니다.

old를 사용하려면 input()사용자 입력을 python 문으로 평가해야하므로을 사용하여 수동으로 입력해야합니다 eval(input()).


26

Python 3에는 raw_input()Sven에서 이미 언급 한 것이 없습니다.

Python 2에서 input()함수는 입력을 평가합니다.

예:

name = input("what is your name ?")
what is your name ?harsha

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    name = input("what is your name ?")
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

위의 예제에서 Python 2.x는 harsha를 문자열이 아닌 변수로 평가하려고합니다. 이를 피하기 위해 "harsha"와 같이 입력에 큰 따옴표를 사용할 수 있습니다.

>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha

raw_input ()

raw_input () 함수는 평가하지 않으며 입력 한 내용 만 읽습니다.

예:

name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'

예:

 name = eval(raw_input("what is your name?"))
what is your name?harsha

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    name = eval(raw_input("what is your name?"))
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

위의 예에서 방금 eval함수를 사용하여 사용자 입력을 평가하려고했습니다 .


7

python 2 사용자를 위해 모든 사람이 제공 한 설명에 조금 더 자세히 설명하고 싶습니다 . raw_input()지금까지 사용자가 입력 한 데이터를 문자열로 평가한다는 것을 알고 있습니다. 이것은 파이썬이 입력 된 데이터를 다시 이해하려고 시도하지 않음을 의미합니다. 고려할 것은 입력 된 데이터가 실제 문자열인지 또는 int인지에 관계없이 문자열이된다는 것입니다.

반면 input()에 사용자가 입력 한 데이터를 이해하려고합니다. 따라서 입력 helloworld은 오류를 ' helloworld is undefined' 로 표시합니다 .

결론적으로 파이썬 2의 경우 문자열도 입력하려면 ' helloworld' 처럼 입력해야합니다. ' '는 문자열을 사용하기 위해 파이썬에서 사용되는 일반적인 구조입니다.


3

코드가 python2 및 python3으로 실행 중인지 확인하려면 스크립트에서 함수 입력 ()을 사용하고이를 스크립트 시작에 추가하십시오.

from sys import version_info
if version_info.major == 3:
    pass
elif version_info.major == 2:
    try:
        input = raw_input
    except NameError:
        pass
else:
    print ("Unknown python version - input function not safe")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.