Tôi mới sử dụng Python và tôi không chắc chắn nơi tốt nhất để đặt ngoại lệ do người dùng xác định là gì và nơi bắt chúng.Vị trí ngoại lệ do người dùng xác định bằng Python và bắt
Ví dụ: tôi có một chương trình khởi động trò chơi, khi trò chơi bị dừng, ngoại lệ do người dùng xác định được tăng lên (StopGame). Tôi nên bắt ngoại lệ này từ bên ngoài trò chơi vì trò chơi đang ném ngoại lệ này. Mặc dù, ngoại lệ là đặc trưng cho trò chơi nên định nghĩa ngoại lệ phải ở trong mô-đun trò chơi (hoặc có thể là gói trò chơi?).
Dưới đây là cách bố trí đơn giản của chương trình:
cấu trúc Chương trình:
__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()
trò chơi/_ _init_ _ py
from game import Game
from game import StopGame
trò chơi/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
Mã này hoạt động tốt như thế này, tôi chỉ không chắc chắn đây là con đường để đi. Điều tôi thấy hơi thất vọng là tôi nên nhập mọi ngoại lệ trong trò chơi/_ init _ .py bằng cách sử dụng thiết lập này. Nếu không, tôi nên bắt ngoại lệ như:
except game.game.StopGame
Có vẻ hơi khó chịu. Tôi nghĩ tốt hơn là có thể tiếp cận tất cả các thuộc tính trong mô-đun 'trò chơi' từ biến 'trò chơi' trong _ chính _ .py. Sau đó, tôi biết bạn có thể đặt điều này trong trò chơi/_ init _ py:
from game import *
nào sẽ nhập khẩu tất cả các lớp từ trò chơi/game.py, nhưng tôi nghe nói rằng việc sử dụng * cho nhập khẩu là một xấu thực hành.
Vì vậy, câu hỏi của tôi là, cách tốt nhất để làm điều này là gì? Có lẽ toàn bộ thiết lập của tôi là sai, nếu có, tôi muốn nghe thiết lập chính xác là gì.
Cảm ơn rất nhiều trước!
BTW: Nếu bạn có thể thắc mắc tại sao tôi có mô-đun trò chơi bên trong gói trò chơi: ý tưởng là gói sẽ chứa nhiều mô-đun hơn có liên quan đến trò chơi, game/game.py chỉ là người khởi xướng của toàn bộ trò chơi, có lẽ tôi nên đặt mã đó vào trò chơi/_ init _ .py?
Bạn có nghĩ rằng 'StopGame' phải là lỗi không? – Blender
Tôi nên dừng trò chơi bằng cách nào? Tôi có thể để Game() trả về false hoặc một cái gì đó, nhưng sau đó tôi nên xây dựng cơ chế trả về này trong mỗi tầng sâu hơn từ Game(), nơi trò chơi có thể muốn được dừng lại. – rednaw
@Blender Xem xét 'SystemExit' là một ngoại lệ, tôi nghĩ rằng 'StopGame' là một điều quá hợp lý. –