zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python面向对象编程-自定义异常使用(一)

Python异常 使用 自定义 面向对象编程
2023-06-13 09:18:43 时间

自定义异常可用于多种目的。

定义文件时,当文件的格式不正确时,我们可以抛出自定义异常来指示错误。

  • 在编写网络应用程序时,如果网络请求失败,我们可以抛出自定义异常来指示错误。
  • 在编写数据库应用程序时,如果数据库连接失败,我们可以抛出自定义异常来指示错误。
  • 在编写游戏时,如果玩家尝试在不允许的情况下执行某个操作,我们可以抛出自定义异常来指示错误。

下面是一个使用自定义异常的示例,它演示了如何在游戏中处理玩家错误操作:

class InvalidMoveError(Exception):
    def __init__(self, message):
        self.message = message

class Game:
    def __init__(self):
        self.board = [['', '', ''] for i in range(3)]
        self.current_player = 'X'
    
    def display_board(self):
        for row in self.board:
            print(row)
    
    def make_move(self, row, col):
        if row < 0 or row > 2 or col < 0 or col > 2:
            raise InvalidMoveError("Invalid move. Please choose a row and column between 0 and 2.")
        if self.board[row][col] != '':
            raise InvalidMoveError("Invalid move. That square is already taken.")
        
        self.board[row][col] = self.current_player
        
        if self.current_player == 'X':
            self.current_player = 'O'
        else:
            self.current_player = 'X'
    
    def is_game_over(self):
        for i in range(3):
            if self.board[i][0] == self.board[i][1] == self.board[i][2] != '':
                return True
            if self.board[0][i] == self.board[1][i] == self.board[2][i] != '':
                return True
        if self.board[0][0] == self.board[1][1] == self.board[2][2] != '':
            return True
        if self.board[0][2] == self.board[1][1] == self.board[2][0] != '':
            return True
        return False

game = Game()

while not game.is_game_over():
    game.display_board()
    row = int(input("Enter row (0-2): "))
    col = int(input("Enter column (0-2): "))
    try:
        game.make_move(row, col)
    except InvalidMoveError as e:
        print("Error:", e.message)

game.display_board()
print("Game over!")

上面的示例中,我们定义了一个名为 Game 的游戏类,用于处理棋盘和游戏规则。我们还定义了一个名为 InvalidMoveError 的自定义异常,用于处理玩家的无效移动。

make_move 方法中,如果玩家选择了无效的行或列,则抛出 InvalidMoveError。如果玩家选择了已经被占用的方格,则也会抛出 InvalidMoveError。在 while 循环中,我们不断调用 make_move 方法,并在出现异常时捕获和处理异常。在异常处理程序中,我们将打印错误消息,告诉用户出现了什么错误。