Python 3.3控制台NameError

时间:2013-05-08 02:35:08

标签: python-3.x

我发生了一个奇怪的错误。我正试图通过python控制台窗口运行基于文本的游戏,代码在 IDLE 中运行良好,但是当我在控制台中运行时,它会执行要求的步骤一个名字然后立即关闭。

错误代码是“ NameError: name 'JJ' is not defined

它应该执行的代码是:

print ("*~~~~~~~~~~~~~~~~~~~~~*")
print ("*|Welcome to the Game|*")
print ("*~~~~~~~~~~~~~~~~~~~~~*")
print ("")
time.sleep(1)
User_name = input ("What is your Name? ")
time.sleep(1)
print ("Welcome",User_name," enter irrelevant story information here")
print("more irrelevant story here.")
print ("more irrelevant story here")
print ("")
time.sleep (1)

我已多次验证我正在运行python 3.3并且控制台说“C:\ Python33 \ py.exe所以我相信这也是一致的。

是的我确实导入了时间库,这绝对不是错误。

提前多多感谢您的帮助!

编辑:清除混淆:以下是显示正在发生的事情的图片链接:http://imgur.com/a/0nh11#0

第一张图片显示错误,第二张图片显示代码,第三张图片显示在IDLE中运行的程序没有错误。

2 个答案:

答案 0 :(得分:1)

很可能你在控制台上运行IDLE和Python 2中的Python 3。在控制台上运行没有参数的python并观看登录文本。你提到了运行py.exepy.exe是一个管理器,用于管理在单个系统上运行多个版本的Python。要确保您运行所需的Python版本,请将以下内容添加为脚本的第一行:

#!python3

或者,运行py.exe -3以强制使用Python 3。

Python 2中的线索input作为代码执行其输入,这就是为什么输入JJ会给出您看到的错误。 raw_input没有。 Python 3中不提供raw_input,Python 3中的input与Python 2中的raw_input类似。

示例:

C:\>py -2
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> raw_input('?')
?JJ
'JJ'
>>> input('?')
?JJ
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'JJ' is not defined
>>> ^Z

C:\>py -3
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> raw_input()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'raw_input' is not defined
>>> input()
JJ
'JJ'
>>>

答案 1 :(得分:0)

就我所见,它看起来还不错。而且,我跑了它,它对我来说很好。所以,似乎你没有完全按照你在这里展示的代码运行;也许有更多的代码,或者当你试图运行它时你可能犯了错误。

我建议您将程序放在源文件中,而不是将其粘贴到控制台中。然后,当您收到错误时,堆栈回溯将向您显示程序中Python出现问题的确切位置。

然后向后工作并弄清楚导致问题的原因并修复它。

例如,我创建了一个源文件,其中包含您提供的程序的确切文本,并尝试运行它。由于我从未导入time,我知道它会失败。这是我得到的回溯:

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    time.sleep(1)
NameError: name 'time' is not defined

这个问题的解决方案是在第5行之前的一行import time

编辑:我认为@Cairnarvon建议了正确答案。我认为这个程序是在Python 2.x下运行的。 @Cairnarvon建议您更改程序以使用raw_input()作为检查;如果你真的在Python 2.x下运行,你的程序将突然运行,如果你在Python 3.x下运行,你将在NameError行获得raw_input

检查它的另一种方法是添加此代码:

import sys
assert sys.version_info[0] >= 3

这项检查的好处在于您可以将其保留,如果问题再次发生,它会清楚地告诉您问题。

编辑:此外,您可以在程序的顶部添加:

import sys
print(sys.version)

然后确保它打印一个以3开头的版本号。如果您的版本号从3开始,请将其粘贴到问题中;有人可能会发现版本信息中的线索。