通用的方法来避免广泛的p除外?

时间:2017-02-13 19:24:52

标签: python exception exception-handling pep8

PEP8不喜欢广泛的异常处理,如

try:
    do_something()
except Exception:
    handle_exception()

我知道,有充分的理由,例如SystemExitKeyboardInterrupt以无意义的方式处理或丢失重要的错误案例。

但有时我认为我必须处理“所有其他”异常,例如:

while True:
    try:
        result = handle_request(get_request())
    except (all, my, known, exceptions) as ex:
        sophisticated_exception_handling()
    except (KeyboardInterrupt, SystemExit):
        raise
    except Exception as ex:
        # handle exotic situations which just didn't happen before
        result = "something bad happened: %r" % ex

在这个例子中,我不想让我的消息循环中断,因为 一些子例程引发了一个我刚才没想过的异常。

当然我只能# pylint: disable这条线没有得到任何警告 - 但这并不是最复杂的答案。

所以我的问题是:

是否有一些很好的方法可以很好地处理所有异常,因此在不忽略PEP8警告的情况下永远不会脱离我的消息处理循环?

1 个答案:

答案 0 :(得分:0)

您似乎有PEP20中提到的“基于实用性的特殊情况,应该胜过纯度”:

Special cases aren't special enough to break the rules.
Although practicality beats purity.

...和...

Errors should never pass silently.
Unless explicitly silenced.

我相信您的代码没有违反PEP20(又名The Zen of Python