Because except: catches all exceptions, including SystemExit,
KeyboardInterrupt, and GeneratorExit (which is not an error and should
not normally be caught by user code), using a bare except: is almost
never a good idea. In situations where you need to catch all “normal”
errors, such as in a framework that runs callbacks, you can catch the
base class for all normal exceptions, Exception. Unfortunately in Python 2.x it is
possible for third-party code to raise exceptions that do not inherit from Exception, so
in Python 2.x there are some cases where you may have to use a bare except: and manually > re-raise the exceptions you don’t want to catch.
您计划在主代码中捕捉异常,记录它并终止它,这是一个很好的计划。在
可能会有例外,这是很好的,但并不意味着,你应该把它们视为问题,例如
KeyboardInterrupt
战略可以是:
pass
Exception
,记录并终止。在代码可能看起来像:
什么时候捕捉异常显式失败
如果发生意外的异常,那么通过显式地捕捉所有预期的异常来改进的建议很短。您的计划是捕获日志文件中出现的任何内容,这听起来不错,并为以后解决问题提供了足够的信息。在
想象一下,你有一个守护进程,它会一直运行下去。在某些情况下,它可能会失败。在
如果只期望显式异常,则可能发生意外异常,不
expect
将有机会将其记录到日志文件中,stacktrace将被打印到stdout并被遗忘 程序终止。在这是一个很清楚而且非常合理的用例,可以用来捕捉异常。在
在所有语言、时间和地点,最好指定特定的异常。这样你就不会掩饰一个你没想到的情况。永远不要在生产代码中捕捉
Exception
,除非你有一个非常非常好的理由,或者你的处理程序是真正通用的。一个合适的泛型处理程序的例子是记录、执行清理和重新分级。在从documentation:
一般来说,最好是捕获显式异常。在python2中,如果一个外部模块抛出了一个未继承异常的东西,那么您仍然无法捕捉到异常。在
通过捕捉显式异常,您可以处理您知道可能发生的错误。如果你包揽一切,你的应用程序可能会做一些意想不到的事情,你可能会错误地处理它。在
另外,你真的想抓住某人用Ctrl+C结束你的程序吗?在
相关问题 更多 >
编程相关推荐