5

说我有这个代码:

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

3 回答 3

1

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

于 2013-05-17T15:04:44.630 回答
1

如果区分异常与wait_for_x来自那些的condition_that_could_raise_exceptions足够重要,那么当然,定义一个新的异常类型。毕竟,类型是区分不同类型异常的主要方式,而解析消息往往很快就会变得混乱。

于 2013-05-17T15:04:49.427 回答
0

Python 标准库定义了很多自己的自定义异常。对于个人模块或功能,这样做似乎也是一种好习惯。

于 2013-05-17T15:29:43.317 回答