为单个函数声明异常类型是否合理?

时间:2013-05-17 15:01:26

标签: python exception

说我有这段代码:

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,), {})

3 个答案:

答案 0 :(得分:1)

是的,当没有任何内置异常类型适合时,您当然应该定义自己的异常类。在某些情况下(例如,如果您在LXML或BeautifulSoup之上构建某种HTML munger),使用其他模块中的异常也是合适的。

答案 1 :(得分:1)

如果区分wait_for_x的异常与condition_that_could_raise_exceptions的异常非常重要,那么请确定新的异常类型。毕竟,类型是区分不同类型异常的主要方式,解析消息往往会很快变得混乱。

答案 2 :(得分:0)

Python标准库定义了许多自己的自定义异常。对于个人模块或功能来说,这也是一种很好的做法。