새로운 것을 시작하는 것은 항상 어렵습니다. 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"와 같은 에러가 발생할때 조치방법에 대해서 설명드렸습니다.
이상입니다.
'Study > Python 공부' 카테고리의 다른 글
윈도우즈에서 python 설치 및 명령창에서 python 실행 방법 (0) | 2021.03.04 |
---|---|
[Python] ms 단위 sleep 주는 방법 (0) | 2021.01.23 |