NameError:名称 '___' 未定义
当我在终端运行以下代码时:
import getpass
import sys
import telnetlib
import time
user = input("Please Enter Your Username: ")
password = input("Please Enter Your Password: ")
ip = input("Please Enter RPi IP Address: ")
bot = telnetlib.Telnet(ip)
bot.read_until("login: ")
bot.write(user + "\n")
bot.read_until("password: ")
bot.write(password + "\n")
我收到一个错误信息,内容是:
Traceback (most recent call last):
File "con.py", line 6, in <module>
use = input("Please Enter Your Username: ")
File "<string>", line 1, in <module>
NameError: name 'pi' is not defined
顺便说一下,pi
是传给变量 user
的值。它在 Python 的命令行中可以运行(直到到达 telnet 部分,但显然在命令行中就不行了)。为什么它在终端中不能运行呢?
谢谢
1 个回答
3
在Python 2中,想要从用户那里获取字符串输入时,应该使用raw_input()
,而不是input()
。
input()
会尝试把输入的内容当作Python表达式来处理;如果你输入一个没有引号的字符串,它会把这个字符串当作变量名来解析,这就会出现NameError
错误。你可以输入"pi"
,但这样做并不是一个很好的用户体验。
示例:
>>> input("Please Enter Your Username: ")
Please Enter Your Username: pi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'pi' is not defined
>>> raw_input("Please Enter Your Username: ")
Please Enter Your Username: pi
'pi'