使用 try 和 except 引发异常时遇到问题

Trouble raising an exception using try and except

我正在尝试在为我的函数提供无效角色时引发异常。我的代码如下

    def __init__(self, role, name, health):
        try:
            if role == 'Grooble' or role == 'Throve' or role == 'Plaguelet':
                self.role = str(role)
        
        except ValueError:
            print("Invalid Whosit role")  

测试是

try:
    oof = Whosit('Famine', 'Fred', 0)
    print("Did you forget to raise an exception?")
except ValueError as e:
    print(e)

Famine 是一个无效的角色,但我正在努力让我的代码看到这个 ValueError 并打印“Invalid Whosit role”

您的 __init__ 中没有任何内容会引发 ValueError,因此 except ValueError 子句永远不会 运行。如果 role 不匹配 GroobleThrovePlaguelet,则不会设置 self.role,仅此而已。如果 role 不匹配,IISC 你希望引发 ValueError,所以你必须自己做:

    def __init__(self, role, name, health):
        if role in ['Grooble', 'Throve', 'Plaguelet']:
            self.role = str(role)
        else:
            raise ValueError("Invalid Whosit role")

请注意,我还稍微简化了 role 的检查 ;)