我刚刚完成了一个应该(希望)播放GUI Tetris程序的程序。我已经清理了所有的语法错误,但是现在当我双击,或者通过命令提示符运行程序时,DOS窗口弹出不到一秒钟,并且在没有运行程序的情况下消失。
发生了什么事?
以下是codepad.org上代码的链接
答案 0 :(得分:9)
pdb
下运行它,逐个识别和修复它们,但是在20左右之后我就放弃了。到目前为止我已修复的内容(在diff
的输出中,行以<
开头表示它们在您的版本中,或者>
表示它们在我的部分修复版本中)。注意多种多样:你经常写Flase而不是False,使用错误的大写,使用-
(减号)而不是=
(等于),拼写错误变量(例如Boardd
而不是{{1 },Board
代替even
),event
代替rnage
,依此类推,等等。
range
经过所有这些修复之后,我已经停止发现另外一个错字(当你明确指出37c37
< self.isStarted = Flase
---
> self.isStarted = False
63c63
< self.isWaitingAfterLine - Flase
---
> self.isWaitingAfterLine = False
87c87
< for i in range(Board.BoardHeight * Board.Boardwidth):
---
> for i in range(Board.BoardHeight * Board.BoardWidth):
135c135
< if even.GetId() == Boardd.ID_TIMER:
---
> if event.GetId() == Board.ID_TIMER:
205c205
< self.curY = Board.Height - 1 + self.curPiece.minY()
---
> self.curY = Board.BoardHeight - 1 + self.curPiece.minY()
214c214
< for i in rnage(4):
---
> for i in range(4):
217c217
< if x < 0 or x >= Board.BoardWidth or y < 0 or y >= Board.Boardheight:
---
> if x < 0 or x >= Board.BoardWidth or y < 0 or y >= Board.BoardHeight:
278c278
< self.coords = [[0, 0] for i in rnage(4)]
---
> self.coords = [[0, 0] for i in range(4)]
356c356,357
< Tetris(None, -1, 'Tetris')
---
> tetris = Tetris(None, -1, 'Tetris')
> app.SetTopWindow(tetris)
时你是def sqaureHeight
) - 我不知道有多少错别字和其他错误仍然隐藏在这360行代码......比这些行的1/10更密集的错误足够高。
我衷心地建议你从多不那么雄心勃勃的项目开始,并教你自己仔细“复制”你的代码,因为这些错字似乎很容易:它是可能同时成为一名出色的程序员,但同时又需要额外的努力和勤奋。 诸如pylint
之类的工具也可能有所帮助,尽管它们确实有限制。
编辑:事实证明,在将squareHeight
发生了几次sqaure
后,程序确实运行了 - 并立即显示一个空窗口说“游戏结束“并进入square
提示,作为最后一行。因此,除了许多拼写错误之外,还必须存在一个或多个令人讨厌的逻辑级错误。在你第一次尝试编程的过程中,我重复一下这个恳求,开始时有很多东西,很多更简单。
答案 1 :(得分:8)
运行脚本确实会产生追溯:
Traceback (most recent call last):
File "tetris.py", line 356, in <module>
Tetris(None, -1, 'Tetris')
File "tetris.py", line 10, in __init__
self.statusbar - self.CreateStatusBar()
AttributeError: 'Tetris' object has no attribute 'statusbar'
您的脚本在第10行有错误:
self.statusbar - self.CreateStatusBar()
你的意思是在那里分配,而不是从尚不存在的属性中减去。
答案 2 :(得分:2)
发生错误。不幸的是,DOS窗口关闭(因为Python程序结束),你没有看到实际的错误。自己启动DOS窗口(开始 - &gt;运行 - &gt;'cmd')并从那里运行程序。这将向您展示追溯。
答案 3 :(得分:0)
DOS窗口弹出,因为你使用了错误的python二进制文件(python.exe而不是pythonw.exe?)
它没有显示任何内容,因为您的程序中存在错误。如果没有堆栈跟踪,我猜你忘了进入主循环。尝试发布一些代码。
答案 4 :(得分:0)
Traceback (most recent call last):
Line 3, in <module>
import wx
ImportError: No module named wx
您需要安装wxPython
答案 5 :(得分:0)
您可能想要更改(在脚本底部)
app = wx.App()
到
app = wx.App(redirect=False)
否则,wxPython启动时发生的分段错误将不会打印到控制台,并且可能成为追踪的噩梦。