我是 Python 新手,我不确定放置用户定义异常的最佳位置是什么,以及在哪里捕获它们。
例如,我有一个启动游戏的程序,当游戏停止时,会引发用户定义的异常(StopGame)。我应该从游戏外部捕获这个异常,因为游戏正在抛出这个异常。但是,异常是特定于游戏的,因此异常的定义应该在游戏模块(或者可能是游戏包?)中。
这是程序的简单布局:
程序结构:
__main__.py
game/
__init__.py
game.py
_ _main_ _ .py
import game
def main():
g = game.Game()
try:
g.start()
except game.StopGame:
print '\nbye bye!'
if __name__ == '__main__':
main()
游戏/ _ _init_ _ .py
from game import Game
from game import StopGame
游戏/游戏.py
class Game:
def start(self):
try:
a = raw_input('do you want to play?\n')
print 'cool'
except (KeyboardInterrupt, EOFError):
raise StopGame
if a == 'no':
raise StopGame
else:
print 'cool'
class StopGame(Exception):
pass
这段代码像这样工作得很好,我只是不确定这是要走的路。我发现有些令人失望的是,我应该使用此设置导入 game/_init _.py中的每个异常。否则我应该捕捉到这样的异常:
except game.game.StopGame
这看起来有点讨厌。我认为最好能够从_main_.py 中的变量'game' 中访问模块'game' 中的所有属性。然后我知道你可以把它放在游戏/ _ init _ .py 中:
from game import *
这将从 game/game.py 导入所有类,但我听说使用 * 进行导入是一种不好的做法。
所以,我的问题是,最好的方法是什么?也许我的整个设置是错误的,如果是这样,我想听听正确的设置是什么。
提前非常感谢!
BTW:如果你可能想知道为什么我在游戏包内有一个游戏模块:这个想法是这个包将包含更多与游戏相关的模块,game/game.py 只是整个游戏的发起者,也许我应该将该代码放入游戏/ _ init _ .py 中?