【问题标题】:Trouble raising an exception using try and except使用 try 和 except 引发异常时遇到问题
【发布时间】:2021-08-19 08:15:46
【问题描述】:

当我的函数被赋予无效角色时,我试图引发异常。我的代码如下

    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”

【问题讨论】:

  • 请注意,在这种情况下,您可能希望使用enum 来表示角色。但是,except 仅在引发异常时运行。评估为 Falseif 语句不会引发异常。只需使用else

标签: python python-3.x except


【解决方案1】:

您的__init__ 中没有任何内容会引发ValueError,因此except ValueError 子句将永远不会运行。如果roleGroobleThrovePlaguelet 不匹配,则不会设置self.role,但仅此而已。如果 role 不匹配,您希望提高 ValueError 的 IISC,因此您必须自己执行此操作:

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

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

【讨论】:

  • 我试过这个,但现在它也打印“你忘记引发异常了吗?”在它打印“无效的 Whosit 角色”之后。
  • 去掉“try”,它隐藏了异常。这也是一个无效的语法,尝试需要一个except。
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 2010-10-22
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多