You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python类中使用方法实现错误捕获?以骰子类为例

实现骰子类的参数校验私有方法

看起来你已经搭好了骰子类的架子,现在要通过私有方法__check_dice来统一做参数校验,避免后续方法里重复写错误检查逻辑对吧?我来帮你完善这个实现:

首先,我们需要让__check_dice完成两个核心校验:

  • 确保起始点数first_num和结束点数last_num都是整数(毕竟骰子点数都是整数嘛)
  • 确保结束点数不小于起始点数,不然骰子的范围逻辑就不成立了

然后在初始化方法__init__里调用这个私有方法,这样创建实例时就会立刻触发校验,把问题提前暴露出来,不用等到掷骰子的时候才出错。

完整代码如下:

import numpy as np

class Dice():
    """ 模拟掷骰子,结果范围为first_num到last_num(包含两端) """
    def __init__(self, first_num=1, last_num=6):
        self.first_num = first_num
        self.last_num = last_num
        # 初始化时立即执行参数校验
        self.__check_dice()
    
    def __check_dice(self):
        # 校验参数是否为整数类型
        if not isinstance(self.first_num, int) or not isinstance(self.last_num, int):
            raise TypeError("骰子的起始和结束点数必须是整数哦")
        # 校验结束点数不小于起始点数
        if self.last_num < self.first_num:
            raise ValueError("结束点数不能比起始点数小呀,请确保 last_num >= first_num")
    
    def roll(self):
        # 实现掷骰子逻辑,返回范围内的随机整数
        return np.random.randint(self.first_num, self.last_num + 1)

代码说明:

  1. 私有方法的作用:__check_dice是类的私有方法(开头双下划线),只能在类内部调用,避免外部代码误修改或调用,保证校验逻辑的封装性。
  2. 提前校验:在__init__里调用校验,创建实例时就会立刻检查参数合法性,不用在roll或者其他方法里重复写校验代码,符合**DRY(Don't Repeat Yourself)**原则。
  3. 明确异常:抛出TypeError和ValueError两种不同类型的异常,让调用者能快速定位问题类型。

测试示例:

合法实例(正常运行)

# 创建标准6面骰子
standard_dice = Dice()
print(standard_dice.roll())  # 输出1-6之间的随机整数

# 创建2-10面的自定义骰子
custom_dice = Dice(2, 10)
print(custom_dice.roll())  # 输出2-10之间的随机整数

非法实例(触发异常)

# 结束点数小于起始点数,抛出ValueError
invalid_dice1 = Dice(5, 3)

# 参数为非整数,抛出TypeError
invalid_dice2 = Dice(1.5, 6)

内容的提问来源于stack exchange,提问作者gxpr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:21:26