0

我遇到了一个奇怪的错误。我正在尝试通过 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 中运行的程序没有错误。

4

2 回答 2

1

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

#!python3

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

线索input在于 Python 2 将其输入作为代码执行,这就是为什么输入JJ会出现您看到的错误。 raw_input才不是。 raw_input在 Python 3 中不可用,input在 Python 3 中的工作方式与raw_input在 Python 2 中一样。

例子:

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'
>>>
于 2013-05-08T03:04:02.570 回答
0

据我所见,它看起来还不错。而且,我运行了它,它对我来说效果很好。因此,您似乎并没有完全运行您在此处向我们展示的代码;也许有更多的代码,或者你在尝试运行它时犯了一个错误。

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

然后向后工作,找出导致问题的原因,并修复它。

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

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

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

编辑:我认为@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 开头的版本号,请将其粘贴到问题中;有人可能会在版本信息中发现线索。

于 2013-05-08T02:50:35.083 回答