私は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 / 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
このコードはこのように正常に機能しますが、これが正しい方法かどうかはわかりません。少し残念なことに、この設定を使用してgame / _ init_.pyのすべての例外をインポートする必要があります。それ以外の場合は、次のような例外をキャッチする必要があります。
except game.game.StopGame
これは少し厄介に見えます。_ main_.pyの変数'game'からモジュール'game'のすべての属性に到達できる方が良いと思います。次に、これをゲームに入れることができることを知っています/ _ init _ .py:
from game import *
これはgame/game.pyからすべてのクラスをインポートしますが、インポートに*を使用するのは悪い習慣だと聞きました。
だから、私の質問は、これを行うための最良の方法は何ですか?たぶん私のセットアップ全体が間違っているのかもしれません、もしそうなら、私は正しいセットアップが何であるかを聞きたいです。
よろしくお願いします!
ところで:なぜ私がゲームパッケージ内にゲームモジュールを持っているのか不思議に思うかもしれません:パッケージにはゲームに関連するより多くのモジュールが含まれるという考えです、game/game.pyはゲーム全体のイニシエーターにすぎません、多分私はそのコードをgame / _ init _ .pyに入れるべきですか?