如何在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)
代码说明:
- 私有方法的作用:
__check_dice是类的私有方法(开头双下划线),只能在类内部调用,避免外部代码误修改或调用,保证校验逻辑的封装性。 - 提前校验:在
__init__里调用校验,创建实例时就会立刻检查参数合法性,不用在roll或者其他方法里重复写校验代码,符合**DRY(Don't Repeat Yourself)**原则。 - 明确异常:抛出
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
相关产品推荐
相关产品推荐

