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

类中方法内的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:10:18