发生错误时执行python

时间:2018-08-21 07:31:29

标签: python error-handling

我想我不是第一个问这个问题的人,但是我还没有找到可以使用/理解的解决方案。而且这个问题可能并不像我最初预期的那么简单。

我认为可以归结为两个一般性问题:

1)有没有一种方法可以避免Python在发生错误时停止运行,而直接跳到脚本中的下一行代码?

2)如果发生错误,是否有办法使Python执行一行代码?就像,如果出错,那么...

我的具体问题: 我有一个非常大型的程序,其中包含很多功能和其他内容,例如,如果使用“ try”(如果我正确理解的话),则可能需要永久地单独进行调整

我的程序作为一个大循环运行,该循环收集信息并保持运行。这意味着对我来说并不重要,只要程序继续运行,我的程序就会多次失败。我可以轻松地处理某些信息有错误的情况,并且希望我的程序记录下来并继续下去。

对此有解决方案吗?

2 个答案:

答案 0 :(得分:1)

正如您正确指出的那样,Python中的try/catch块是迄今为止最好的盟友:

for i in range(N):
    try: do_foo()  ; except: do_other_foo()
    try: do_bar()  ; except: do_other_bar()

或者,如果您不需要例外,也可以使用:

from contextlib import suppress

for i in range(N):
    with suppress(Exception):
        do_foo()
    with suppress(Exception):
        do_bar()

答案 1 :(得分:0)

您唯一的可能性是依靠try/except子句。请记住,try/except也可以使用finallyelse(请参阅documentation

try:
    print("problematic code - error NOT raised")
except:
    print("code that gets executed only if an error occurs")
else:
    print("code that gets executed only if an error occurs")
finally:
    print("code that gets ALWAYS executed")
# OUTPUT:
# problematic code - error NOT raised
# code that gets executed only if an error occurs
# code that gets ALWAYS executed

或者,当出现错误时:

try:
    print("problematic code - error raised!")
    raise "Terrible, terrible error"
except:
    print("code that gets executed only if an error occurs")
else:
    print("code that gets executed only if an error occurs")
finally:
    print("code that gets ALWAYS executed")
# OUTPUT:
# problematic code - error raised!
# code that gets executed only if an error occurs
# code that gets ALWAYS executed

顺带一提,我想指出忽略一切会让我颤抖:
您确实应该(至少或多或少地)确定可以引发哪个异常,捕获它们(except ArithmeticError: ...,检查built-in exceptions)并分别处理。您尝试做的事情可能会在无尽的问题链中滚雪球,而忽略它们可能会导致更多的问题!

我认为this question有助于了解什么是健壮的软件,与此同时,在this one上,您可以看到SO社区如何处理python异常