异常类代码不起作用

时间:2013-09-27 22:04:36

标签: python class exception error-handling subclass

这就是我得到的:

class E2Exception(Exception):
    pass


class E2OddException(E2Exception):
    pass


def raiser(x):
    if x == "So sue me!":
        raise E2Exception
    elif x != "So sue me!" and x not int:
        raise ValueError
    elif int(x) % 2 != 0:
        raise E2OddException()
    else:
        return None

如果x不能转换为int,我们怎么说呢?

另外,我收到了这个错误:

builtins.TypeError:异常必须从BaseException派生

这是什么意思?

以下说明


E2Exception:一个异常类,它是Exception的子类。

E2OddException:一个异常类,它是E2Exception的子类。

raiser,一个带有一个参数x的函数,具有以下行为:

  • 如果x == 'So sue me!',则raiser(x)会引发E2Exception异常 消息"New Yorker"

  • 如果x != 'So sue me!',但x仍然无法兑换 到一个int(通过调用int(x)),然后raiser(x)提出一个ValueError,没有 对异常消息的要求

  • 如果x转换为奇数int,则raiser(x)会提升 E2OddException,对异常消息没有任何要求。

  • 否则,raiser(x)什么都不做(没有回复,没有印刷品,什么都没有)。

2 个答案:

答案 0 :(得分:1)

  

如果x不能转换为int,我们怎么说呢?

try:
    int(x)
except ValueError:
    ... # Not convertable
else:
    ... # Convertable

在这种情况下,您可能需要设置变量:

try:
    int(x)
except ValueError:
    intable = True
else:
    intable = False

您可以在代码的其余部分(elif x != "So sue me!" and not intable:而非elif x != "So sue me!" and x not int:)内使用。


请注意你的

else:
    return None

是无操作,可以完全删除。

答案 1 :(得分:1)

int()在传递无效输入时引发异常,因此你可以让它发生并摆脱你的return ValueError(真的应该是raise)。

此外,如果您没有显式返回任何内容,Python会自动返回None,因此您可以将代码简化为:

def raiser(x):
    if x == "So sue me!":
        raise E2Exception("New Yorker")
    elif int(x) % 2 != 0:
        raise E2OddException()