说我有这段代码:
def wait_for_x(timeout_at=None):
while condition_that_could_raise_exceptions
if timeout_at is not None and time.time() > timeout_at:
raise SOMEEXCEPTIONHERE
do_some_stuff()
try:
foo()
wait_for_x(timeout_at=time.time() + 10)
bar()
except SOMEEXCEPTIONHERE:
# report timeout, move on to something else
如何为该功能选择例外类型SOMEEXCEPTIONHERE
?为该函数创建一个唯一的异常类型是否合理,以便condition_that_could_raise_exceptions
不会引发相同的异常类型?
wait_for_x.Timeout = type('Timeout', (Exception,), {})
答案 0 :(得分:1)
是的,当没有任何内置异常类型适合时,您当然应该定义自己的异常类。在某些情况下(例如,如果您在LXML或BeautifulSoup之上构建某种HTML munger),使用其他模块中的异常也是合适的。
答案 1 :(得分:1)
如果区分wait_for_x
的异常与condition_that_could_raise_exceptions
的异常非常重要,那么请确定新的异常类型。毕竟,类型是区分不同类型异常的主要方式,解析消息往往会很快变得混乱。
答案 2 :(得分:0)
Python标准库定义了许多自己的自定义异常。对于个人模块或功能来说,这也是一种很好的做法。