我是Python的新手,我不確定什麼是放置我的用戶定義的異常以及在何處捕捉它們的最佳位置。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
遊戲/ game.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
此代碼工作正常這樣的,我只是不知道這是要走的路。我覺得有點令人失望的是,我應該使用此設置導入遊戲中的每個異常/ _ init _ .py。否則,我應該趕上例外:
except game.game.StopGame
這看起來有點討厭。我認爲最好能夠通過_主_.py來從變量'遊戲'中達到模塊'遊戲'中的所有屬性。然後,我知道你可以把這個遊戲/ _ 初始化 _的.py:
from game import *
這將導入所有的類都是從遊戲/ game.py,但我聽說,使用*導入是一個壞實踐。
所以,我的問題是,這樣做的最好方法是什麼?也許我的整個設置是錯誤的,如果是這樣,我想聽聽什麼是正確的設置。
非常感謝!
順便說一句:如果你想知道爲什麼我在遊戲包中有一個遊戲模塊:這個想法是,包中會包含更多與遊戲相關的模塊,遊戲/遊戲.py就是發起者可能我應該將該代碼放入遊戲中/ _ init _ .py?
您是否認爲'StopGame'應該是錯誤的? – Blender
我應該如何停止遊戲?我可以讓Game()返回false或者其他東西,但是我應該在Game()的每一個更深的層次中構建這個返回機制,這個遊戲可能希望被停止。 – rednaw
@Blender考慮到'SystemExit'是一個例外,我認爲'StopGame'也是有道理的。 –