这就是我得到的:
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)
什么都不做(没有回复,没有印刷品,什么都没有)。
答案 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()