NameError:名称 '___' 未定义

1 投票
1 回答
3695 浏览
提问于 2025-04-18 03:31

当我在终端运行以下代码时:

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'

撰写回答