我发生了一个奇怪的错误。我正试图通过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中运行的程序没有错误。
答案 0 :(得分:1)
很可能你在控制台上运行IDLE和Python 2中的Python 3。在控制台上运行没有参数的python并观看登录文本。你提到了运行py.exe
。 py.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
。
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开始,请将其粘贴到问题中;有人可能会发现版本信息中的线索。