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

时间:2023-04-22 10:43:12 来源: 腾讯云


(相关资料图)

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

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

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

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

class InvalidMoveError(Exception):    def __init__(self, message):        self.message = messageclass 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 Falsegame = 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方法,并在出现异常时捕获和处理异常。在异常处理程序中,我们将打印错误消息,告诉用户出现了什么错误。

标签:

精彩推送

世界消息!南宁市邕宁区人民法院网全新改版上线

南宁市邕宁区人民法院网全新改版上线

来源:2023.04.20

世界快报:什么是长护险?值得买吗?

又称长期护理险,是一种健康保险。 它针对个体因年老、疾病或伤残导致日常生活不能自理的情况,提供护理保

来源:2023.04.20

天天新消息丨最高院怎么认定伪造发票的罪

最高人民检察院、公安部《关于公安机关管辖的刑事案件立案追诉标准的规定(二)的补充规定》(节录)(2011年11

来源:2023.04.20

湖北:35条新举措“全周期”呵护个体户 世界热资讯

湖北536万个体工商户发展得好不好,事关经济社会发展大局。4月17日从省市场监管局获悉,省政府办公厅近日正

来源:2023.04.20

2023解放者杯赛程表完整版一览 要闻速递

2023赛季解放者杯在4月5日已经正式打响,小组赛阶段A组-H组各4支合计32支球队将带来多场精彩对话,他们将为

来源:2023.04.20

多家银行官宣下调存款利率!

多家银行官宣下调存款利率!,贷款,定期存款利率

来源:2023.04.20

海贼王:回忆篇白胡子海贼团和顶上战争的白团比,哪个更厉害?

突然想到写这个话题,是因为看到一个分析实力的帖子说:和之国回忆篇中,白胡子海贼团跟罗杰海贼团能打成平

来源:2023.04.20

世界观速讯丨出行丨明起,昆山环湖大道部分路段限行

出行提示!4月21日至4月23日,2023淀山湖(昆山)国际露营节在昆山举办,根据活动安排对昆山环湖大道部分路

来源:2023.04.20

索菲亚们,想要“逆天改命”

衣柜“一哥”索菲亚的日子不太好过。上个月,索菲亚公布定增公告,拟募资5亿至6 14亿元用于补充流动资...

来源:2023.04.20

新闻快讯

X 关闭

X 关闭

新闻快讯