我想我不是第一个问这个问题的人,但是我还没有找到可以使用/理解的解决方案。而且这个问题可能并不像我最初预期的那么简单。
我认为可以归结为两个一般性问题:
1)有没有一种方法可以避免Python在发生错误时停止运行,而直接跳到脚本中的下一行代码?
2)如果发生错误,是否有办法使Python执行一行代码?就像,如果出错,那么...
我的具体问题: 我有一个非常大型的程序,其中包含很多功能和其他内容,例如,如果使用“ try”(如果我正确理解的话),则可能需要永久地单独进行调整
我的程序作为一个大循环运行,该循环收集信息并保持运行。这意味着对我来说并不重要,只要程序继续运行,我的程序就会多次失败。我可以轻松地处理某些信息有错误的情况,并且希望我的程序记录下来并继续下去。
对此有解决方案吗?
答案 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
也可以使用finally
和else
(请参阅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异常