input () error-NameError : 이름 '…'이 (가) 정의되지 않았습니다


220

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

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에서 실행하고 있습니다.


12
파이썬 3.3입니까? 나는 input이런 식으로 행동 할 것으로 기대 하지만 2.7에서만 가능합니다. python --version명령 프롬프트에서 실행할 때 무엇을 말 합니까? 또는 import sys; print(sys.version)스크립트 시작 부분에 글을 쓰면 어떻게됩니까?
케빈

1
파이썬 3을 실행하고 있지 않습니다. 어떻게 든 파이썬 2를 실행하고 있습니다. (이 "파이썬 런처"앱에 익숙하지 않습니다)
Wooble

1
사용중인 버전을 확인하려면 첫 번째 행 import sys과 두 번째 행 print(sys.version_info)으로 설정하십시오.
Hyperboreus

1
나는 Kevin이 말한 것을했고 버전 2.7.5입니다! 그래도 잘 모르겠습니다. 내 응용 프로그램 폴더에 버전 3.3을 다운로드하여 설치했습니다. 해당 폴더 안에 "Python 3.3"이라는 폴더가 있으며 "Python Launcher"라는 응용 프로그램이 있으며 Python Launcher 앱으로 드래그 앤 드롭하여 스크립트를 실행하고 있습니다 . 3.3 런처 앱을 사용할 때 여전히 2.7을 사용하고 있습니까?
chillpenguin

2
@chillpenguin : Python Launcher의 환경 설정 대화 상자를 확인하십시오. 분명히 그것은 설치된 버전을 실행하는 것이 기본값이 아닙니다. (나는 그것을 직접 사용해 본 적이 없습니다. 터미널을 사용하는 것이 더 좋습니다 ...)
Wooble

답변:


265

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.


56

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

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

17

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

#!/usr/bin/env python3

사용하는 경우 :

#!/usr/bin/env python

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

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

#! python

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

#! python3

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

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


6

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))

5

파이썬 3 이상

s = raw_input()

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

s = input()

4

당신은 할 수 있습니다 :

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

또는:

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

1
raw_input이 문제를 해결했습니다
Spencer Goff

그러나 raw_input을은 () 3. 파이썬에서 사용할 수 없습니다
carthurs

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

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

Ex:'dude' -> correct

    dude -> not correct

4

파이썬 2.7 및 3.7과 호환되는 모듈 에서이 문제가 발생했습니다.

내가 문제를 해결하기 위해 발견 한 것은 수입품이었습니다.

from six.moves import input

이것은 두 통역사 모두의 유용성을 고정 시켰습니다.

6 개의 라이브러리에 대한 자세한 내용은 여기를 참조하십시오.


3

우리는 파이썬 2와 파이썬 3 모두에서 작동하는 다음을 사용하고 있습니다.

#Works in Python 2 and 3:
try: input = raw_input
except NameError: pass
print(input("Enter your name: "))

2

이 문제가 발생할 수있는 다른 사람은 포함하더라도 #!/usr/bin/env python3 스크립트 시작 부분에 파일이 실행 가능하지 않으면 shebang이 무시됩니다.

파일이 실행 가능한지 여부를 판별하려면 다음을 수행하십시오.

  • ./filename.py명령 줄에서 실행
  • 당신이 얻을 경우 -bash: ./filename.py: Permission denied, 실행chmod a+x filename.py
  • ./filename.py다시 실행

import sys; print(sys.version)Kevin이 제안한대로 포함했다면 이제 python3이 스크립트를 해석하고 있음을 알 수 있습니다


2

이전에 좋은 기여를합니다.

import sys; print(sys.version)

def ingreso(nombre):
    print('Hi ', nombre, type(nombre))

def bienvenida(nombre):
    print("Hi "+nombre+", bye ")

nombre = raw_input("Enter your name: ")

ingreso(nombre)
bienvenida(nombre)

#Works in Python 2 and 3:
try: input = raw_input
except NameError: pass
print(input("Your name: "))
이름을 입력하십시오 : Joe
( 'Hi', 'Joe', <type 'str'>)
안녕 조, 안녕 

이름 : Joe
조

감사!


1

이러한 문제를 해결하는 방법에는 두 가지가 있습니다.

  • 첫 번째는
    Python3에서 스크립트를 실행 하는 코드 변경없이 간단 합니다 .python2에서
    계속 실행하려는 경우 파이썬 스크립트를 실행 한 후 입력을 입력 할 때 명심하십시오.

    1. 입력하려면 string"입력은 큰 따옴표로 간다"로 입력을 시작하면 python2.7에서 작동합니다.
    2. 문자를 입력하려면 '입력이 여기에옵니다'와 같이 작은 따옴표로 입력을 사용하십시오
    3. 문제가 아닌 숫자를 입력하려면 간단히 숫자를 입력하십시오.
  • 두 번째 방법은 코드 변경
    으로 아래 가져 오기를 사용하고 모든 버전의 Python으로 실행하는 것입니다

    1. from six.moves import input
    2. 사용 raw_input()대신 기능input()가져 오기에서 코드에서
    3. 다음 str()과 같은 함수를 사용 하여 코드를 위생 처리 str(input())한 다음 모든 변수에 할당

오류가 의미하는 것처럼 :
'dude'라는 이름은 정의되지 않았습니다. 예를 들어 파이썬 'dude'에 대한 변수는 여기에서 변수가되고 파이썬 정의 된 유형의 값이 할당되지
않으므로 아기와 같이 울기 때문에 'dude'변수를 정의하고 값을 지정하면 전달하면 작동하지만 사용자가 입력 할 내용을 알지 못하고 사용자 입력을 캡처하고 싶기 때문에 원하는 것이 아닙니다.

이 방법에 대한 사실 :
input() 기능 :이 기능은 입력 유형을 수정하지 않고 입력 한 값과 유형을 그대로 사용합니다.
raw_input() function :이 함수는 입력 한 입력을 명시 적으로 유형 문자열로 변환합니다.

참고 :
input () 메서드의 취약점은 변수 또는 메서드 이름 만 사용하여 누구나 입력 값에 액세스하는 변수에 액세스 할 수 있다는 사실에 있습니다.


0

IDE와 함께 사용중인 파이썬을 변경할 수 있습니다. 파이썬 3.x를 이미 다운로드 한 경우 너무 어렵지 않아야합니다. 하지만 당신의 스크립트는 파이썬 3.x에서 잘 작동합니다.

print ("your name is" + input_variable)

print ("your name is", input_variable)

쉼표를 사용 your name is하면 사용자가 입력 한 내용과 그 사이에 공백이 인쇄됩니다 . AND : 2.7을 사용 raw_input하는 경우 입력 대신 사용하십시오 .

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