PEP8不喜欢广泛的异常处理,如
try:
do_something()
except Exception:
handle_exception()
我知道,有充分的理由,例如SystemExit
和KeyboardInterrupt
以无意义的方式处理或丢失重要的错误案例。
但有时我认为我必须处理“所有其他”异常,例如:
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警告的情况下永远不会脱离我的消息处理循环?
答案 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)