类中方法内的if语句未生效,如何实现条件异常校验?
问题分析与解决方案
你的代码核心问题是初始化实例时根本没调用set_name方法,所以set_name里的if校验逻辑完全没执行,自然不会抛出异常。你之前尝试把name改成__name、移除get_name,这些操作都没触及根本——校验逻辑的触发时机不对。
修正方案
方案1:在__init__里调用set_name完成赋值
直接在构造方法里调用set_name,让校验逻辑生效:
class Strict: name: str def __init__(self, name): # 通过set_name完成赋值,触发校验 self.name = self.set_name(name) def get_name(self): return self.name def set_name(self, name): if len(name) != 5: raise Exception("Name must be exactly 5 characters") return name try: z = Strict("ABCDEFGH") print(z.name) except Exception as e: print(str(e))
方案2:把校验逻辑直接放到__init__中
如果初始化时就需要校验,直接把判断逻辑移到构造方法里更直接:
class Strict: name: str def __init__(self, name): if len(name) != 5: raise Exception("Name must be exactly 5 characters") self.name = name def get_name(self): return self.name def set_name(self, name): if len(name) != 5: raise Exception("Name must be exactly 5 characters") self.name = name try: z = Strict("ABCDEFGH") print(z.name) except Exception as e: print(str(e))
方案3:用@property封装(更符合Python风格)
用属性装饰器把name变成受管控的属性,不管是初始化还是后续修改,都会自动触发校验:
class Strict: def __init__(self, name): # 这里赋值会触发setter的校验逻辑 self.name = name @property def name(self): return self._name @name.setter def name(self, value): if len(value) != 5: raise Exception("Name must be exactly 5 characters") self._name = value try: z = Strict("ABCDEFGH") print(z.name) except Exception as e: print(str(e))
内容的提问来源于stack exchange,提问作者Passiv AHS
相关产品推荐
相关产品推荐

