How to stop a python script from terminating?
一般情况下,try/except条款用于处理错误和异常,捕捉错误和异常并采取相应的行动。但是假设有一个脚本,用户不确定在哪里可以引发异常。现在,除了到处应用try/except之外,还有什么模块或装饰器可以捕捉到任何异常的发生,并简单地让程序不中断吗?
编辑:这不能是try/except问题的副本。当然,我知道这一点,并且可以将其应用到我知道可能发生异常的所有可能的地方。我专门寻找一些处理异常处理的模块或装饰器。在引发错误之前调用的内置函数也可以解决问题。
- 让程序不中断?但是它会做什么而不是"不破坏"。你所要求的存在,只是暂时不能在上面加上名字。
- @Jean-Fran&231;Oisfabre假设有一个循环在一堆列表上运行来完成一些任务。现在有一次列表元素是用户不知道的意外类型。但是,主要的优先顺序是跳过它,不要退出程序,继续使用列表元素的其余部分。
- 在复制建议中,有一个关于suppress上下文管理器的回答。我想这就是你需要的。from contextlib import suppress
- 在关于如何在异常/错误的情况下不停止python中其他函数的执行的公认答案中,提到了创建自定义装饰器来抑制错误的示例。
- 在开发/调试期间,这类事情是正常的,但您不应该在生产代码中这样做。在随机位置引发随机异常的程序是不可信的。当然,对于一个程序来说,提出预期的异常是非常好的,毕竟这是EAFP设计的核心特性,但是应该明确地处理它们。
- 对于不提供跟踪的警告,可以将其转换为真正的错误(请参阅stackoverflow.com/questions/24513013/traceback-from-a-warnin‌&8203;g)
处理异常的正确方法是在可以引发异常的代码块周围使用try/except块。有时这意味着将您的main()函数(或运行整个程序的任何函数)包装在try/except块中。那很好。如果您想完全忽略这个异常,可以使用contextlib.suppress,这也很好,并且可以为您节省几行代码。
现在,如果出于某种原因,您需要对未捕获的异常作出反应,并且您不能用try/except包围相关的代码段,那么您可以将sys.excepthook设置为一个函数,该函数接受异常信息作为参数,并实现您想要的任何处理,例如记录异常。这是一个相当粗糙的机制,但我不建议在正常情况下使用它。(据我所知,它无法阻止引发异常,如果这是您所要求的,它只能给您一个机会,在堆栈释放和程序结束之前运行一些您自己的代码。)
- 半认真回答github.com/ajalt/fuckitpy