0

这就是我得到的:

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)引发 a ValueError,对异常消息没有任何要求

  • 如果x转换为奇数intraiser(x)则引发 E2OddException, 对异常消息没有任何要求。

  • 否则,raiser(x)什么都不做(不返回,不打印,什么都不做)。

4

2 回答 2

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

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

于 2013-09-27T22:06:09.993 回答
1

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

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

def raiser(x):
    if x == "So sue me!":
        raise E2Exception("New Yorker")
    elif int(x) % 2 != 0:
        raise E2OddException()
于 2013-09-27T22:15:38.587 回答