python忽略导致错误的那一行并继续在该行之后运行代码

时间:2017-07-26 08:23:55

标签: python error-handling

我理解try / except方法。我想做的是:

try:
    some_func1() #potentially raises error too
    do_something_else() #error was raised
    continue_doing_something_else() #continues here after handling error
except:
    pass

在上面的代码中,当在do_something_else()处引发错误时,将处理错误,然后退出try语句。

我想要的是让python继续导致错误的行之后的任何代码。假设在try语句中的任何地方都可能发生错误,所以我不能将try / except包装在do_something_else()本身周围,有没有办法在python中执行此操作?

2 个答案:

答案 0 :(得分:0)

在except之后的可能异常之后放置您想要执行的代码。您可能希望使用finally(有关文档,请参阅https://docs.python.org/3/tutorial/errors.html):

try:
    some_func1()
    do_something_else() #error was raised
except:
    handle_exception()
finally:
    continue_doing_something_else() #continues here after handling error or if no error occurs

如果continue_doing_something_else()也可以抛出异常,那么将其放在try / except中:

try:
    some_func1()
    do_something_else() #error was raised
except:
    handle_exception1()
try:
    continue_doing_something_else()
except:
    handle_exception2()
finally:
    any_cleanup()

作为一般规则,您的异常处理应尽可能保持在尽可能小的范围内,同时保持合理,除了预期的'异常,而不是所有异常(例如,except OSError:在尝试打开文件时)

答案 1 :(得分:0)

在Python中无法实现您想要做的事情(尝试重启)。 Lisp可以做到(http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html),你可以使用call/cc在Scheme中实现它。