본문 바로가기

Study/Python 공부

[Python] 표준입력시 NameError: name 'XXXX' is not defined 에러 메시지 발생시 조치사항

반응형

새로운 것을 시작하는 것은 항상 어렵습니다. C로 밥을 벌어먹고 살지만, python은 또 새롭네요. 

오늘은 python에서 input() 함수로 표준입력을 받을때 NameError: name 'XXXX' is not defined 라는 에러가 발생할 때 조치하는 방법에 대해서 설명드리겠습니다. 

 

[스크립트]

아래는 아주 간단한 python 스크립트입니다. 

표준입력으로 받은 메시지를 표준출력으로 echo 시키는 아주 간단한 2줄짜리 스크립트입니다. 

python 문법적으로도 틀린게 없습니다. 

cmd = input()
print(cmd)

 

여러분들은 위의 스크립트가 잘못되었다고 생각하시나요?

저는 아무리 눈씻고 찾아봐도 오류를 찾을 수 없었습니다. 

 

 

[실행]

위의 스크립트를 아래와 같은 명령을 이용하여 실행했습니다.

$ python stdin.py

 

표준입력으로 a를 입력했더니 NameError: name 'a' is not defined 라는 에러 메시지가 출력되면서 스크립트가 종료되었습니다. 

ubuntu@ubuntu:~/project/python$ python stdin.py
a
Traceback (most recent call last):
  File "stdin.py", line 1, in <module>
    cmd = input()
  File "<string>", line 1, in <module>
NameError: name 'a' is not defined

 

구글링 결과 python 버젼에 따라서 input 함수의 용법이 조금씩 틀린가 봅니다. 

결론부터 말씀드리면, python 에서는 에러가 발생하고, python3 에서는 정상적으로 동작하더군요. 

 

 

[python3로 실행한 결과]

동일한 스크립트를 python3로 실행해봤습니다. 

$ python3 stdin.py

 

아래와 같이 의도한대로 동작을 하더군요. 

ubuntu@ubuntu:~/project/python$ python3 stdin.py 
a
a

 

만약 문법적으로 input() 함수의 사용에 문제가 없는데 "NameError: name 'XXXX' is not defined"와 같은 에러가 발생한다면, python3로 실행시켜보시기 바랍니다. 

 

 

[라즈베리파이에서 ModuleNotFoundError: No module named 'RPi' 에러가 발생한다면]

 

$ sudo python led_rgb2.py

라즈베리파이에서 위와 같이 python으로 실행시키면 잘 동작하던 스크립트가 있었습니다. 

 

$ sudo python3 led_rgb2.py
ubuntu@ubuntu:~/project/led_rgb$ sudo python3 led_rgb2.py
Traceback (most recent call last):
  File "led_rgb2.py", line 3, in <module>
    import RPi.GPIO as GPIO
ModuleNotFoundError: No module named 'RPi'

근데 "NameError: name 'XXXX' is not defined"와 같은 에러가 발생해서 python3로 실행을 했더니 "ModuleNotFoundError: no module named 'RPi'"와 같은 에러가 발생한다면 RPi.GPIO 패키지도 python3 용으로 설치해줘야 합니다. 

 

$ sudo apt-get install python3-rpi.gpio

위와같이 python3용 RPi.GPIO 패키지를 설치해주면 정상적으로 해결됩니다. 

 

[끝 맺음말]

이것으로 python 표준입력을 받기위한 input() 함수에서 "NamedError: name 'XXXX' is not defined"와 같은 에러가 발생할때 조치방법에 대해서 설명드렸습니다. 

 

이상입니다. 

반응형