避免 pylints 宽泛的通用方法?

fra*_*ans 5 python exception-handling exception pep8

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

try:
    do_something()
except Exception:
    handle_exception()
Run Code Online (Sandbox Code Playgroud)

我知道,有很好的理由像SystemExit以及KeyboardInterrupt在未inteded方式或丢失重要错误的情况下被处理。

但有时我认为我必须处理“所有其他”异常,例如在这种情况下:

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
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我不想让我的消息循环被中断,因为某些子例程引发了一个我还没有考虑过的异常。

当然,我可以只用# pylint: disable这条线来不发出警告 - 但这并不是最复杂的答案。

所以我的问题是:

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

小智 0

看起来你有一个 PEP20 中提到的“基于实用性的特殊情况,它应该击败纯粹性”:

Special cases aren't special enough to break the rules.
Although practicality beats purity.
Run Code Online (Sandbox Code Playgroud)

... 和...

Errors should never pass silently.
Unless explicitly silenced.
Run Code Online (Sandbox Code Playgroud)

我相信你的代码没有违反 PEP20(又名Python 之禅