[python] input () error-NameError : 이름 ‘…’이 (가) 정의되지 않았습니다

이 간단한 스크립트를 실행하려고 할 때 오류가 발생합니다.

input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)

“친구”를 입력한다고 가정하면 오류가 발생합니다.

line 1, in <module>
input_variable = input ("Enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'dude' is not defined

이 스크립트를 Python 2.7에서 실행하고 있습니다.



답변

TL; DR

inputPython 2.7의 함수는 입력 한 내용을 Python 표현식으로 평가합니다. 단순히 문자열을 읽으려면 raw_inputPython 2.7에서 함수 를 사용하십시오.이 기능은 읽은 문자열을 평가하지 않습니다.

Python 3.x를 사용하는 경우 raw_input이름이로 변경되었습니다 input. 파이썬 3.0 릴리스 노트 인용 ,

raw_input()로 이름이 변경되었습니다 input(). 즉, 새 input()함수는 줄을 읽고 sys.stdin후행 줄 바꿈을 제거한 상태로 반환합니다. 이 제기 EOFError입력이 조기 종료되는 경우. 의 이전 동작 얻으려면 input(), 사용eval(input())


Python 2.7 에는 사용자 입력을 받아들이는 데 사용할 수있는 두 가지 함수가 있습니다. 하나는 input다른 하나는 raw_input입니다. 당신은 다음과 같이 그들 사이의 관계를 생각할 수 있습니다

input = eval(raw_input)

이 코드를 더 잘 이해하려면 다음 코드를 고려하십시오.

>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'

input사용자로부터 문자열을 받아 현재 Python 컨텍스트에서 문자열을 평가합니다. 입력 dude으로 입력 dude하면 값에 바인딩되어 thefourtheye평가 결과가 thefourtheye되고에 할당됩니다 input_variable.

현재 파이썬 컨텍스트에없는 다른 것을 입력하면 실패합니다 NameError.

>>> input("Enter your name: ")
Enter your name: dummy
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'dummy' is not defined

Python 2.7의 보안 고려 사항 input:

모든 사용자 유형이 평가되므로 보안 문제도 부과됩니다. 예를 들어, os프로그램을 사용하여 이미 모듈을 로드 import os한 다음 사용자는

os.remove("/etc/hosts")

이것은 파이썬에 의해 함수 호출 표현식으로 평가되어 실행될 것입니다. 높은 권한으로 Python을 실행하면 /etc/hosts파일이 삭제됩니다. 얼마나 위험한가요?

이를 설명하기 위해 input함수를 다시 실행 해 봅시다 .

>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude

이제 input("Enter your name: ")실행되면 사용자 입력을 기다리며 사용자 입력은 유효한 Python 함수 호출이므로 호출됩니다. 그래서 우리는 Enter your name again:다시 프롬프트를 보게 됩니다.

따라서 다음 raw_input과 같은 기능 을 사용하는 것이 좋습니다.

input_variable = raw_input("Enter your name: ")

결과를 다른 유형으로 변환해야하는 경우 적절한 함수를 사용하여에서 반환 된 문자열을 변환 할 수 있습니다 raw_input. 예를 들어 입력을 정수로 읽으려면 이 답변에int 표시된 대로 함수를 사용하십시오. .

python 3.x 에는 사용자 입력을 얻는 함수가 하나 뿐이며 input, 이는 Python 2.7과 동일합니다 raw_input.


답변

Python 3이 아닌 Python 2를 실행하고 있습니다 raw_input. Python 2에서 작동하려면을 사용하십시오 .

input_variable = raw_input ("Enter your name: ")
print ("your name is" + input_variable)


답변

Python 3.x를 작성하고 있으므로 다음과 같이 스크립트를 시작해야합니다.

#!/usr/bin/env python3

사용하는 경우 :

#!/usr/bin/env python

기본적으로 Python 2.x로 설정됩니다. #으로 시작하는 것이 없으면 스크립트의 첫 번째 줄로 이동합니다 ! (일명 shebang).

스크립트가 다음으로 시작하는 경우 :

#! python

그런 다음 다음과 같이 변경할 수 있습니다.

#! python3

이 짧은 형식은 실행기와 같은 일부 프로그램에서만 인식되므로 최선의 선택은 아닙니다.

처음 두 예제는 훨씬 더 널리 사용되며 Python이 설치된 모든 컴퓨터에서 코드가 작동하도록 도와줍니다.


답변

raw_inputpython-2.7을 사용하고 있으므로 사용해야합니다 . 당신이 사용하는 경우 input()(예 : 변수에 s = input('Name: ')), 그것은 (당신이 변수에 쓴 저장하지 않고 파이썬 환경에서 명령을 실행합니다s )를 당신이 정의되어 있지 쓴 경우 오류를 생성합니다.

raw_input()변수에 쓴 내용을 올바르게 저장하고 (예 f = raw_input('Name : ')🙂 오류가 발생하지 않으면 Python 환경에서 변수를 실행하지 않습니다.

input_variable = raw_input('Enter Your Name : ')
print("Your Name Is  : " + (input_variable))


답변

파이썬 3 이상

s = raw_input()

온라인 사이트에서 정확하게 hackerrank를 해결하고 다음을 사용하는 경우 pycharm IDE의 문제를 해결합니다.

s = input()


답변

당신은 할 수 있습니다 :

x = raw_input("enter your name")
print "your name is %s " % x

또는:

x = str(input("enter your name"))
print "your name is %s" % x


답변

input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)

작은 따옴표 나 큰 따옴표로 입력을 입력해야합니다

Ex:'dude' -> correct

    dude -> not correct