如何在Python的try块中继续下一行?

时间:2011-10-31 11:08:38

标签: python exception

e.g。

try:
    foo()
    bar()
except: 
    pass

当foo函数引发异常时,如何跳到下一行(bar)并执行它?

5 个答案:

答案 0 :(得分:9)

bar()区块中取出try

try:
    foo()
except: 
    pass
bar()

顺便说一句,请注意全部except条款。希望有选择地捕获您知道可以处理/忽略的异常。

答案 1 :(得分:6)

如果bar的调用位于try - 阻止内,则无法完成。您必须将调用置于try-except块之外,或使用else

try:
    foo()
except:
    pass
else:
    bar()

如果bar也可能引发异常,则必须为try使用单独的bar块。

答案 2 :(得分:2)

这不是try / except块的预期方式。如果即使bar()失败也应执行foo(),您应该将每个都放在自己的try / except块中:

try:
  foo()
except:
  pass # or whatever

try:
  bar()
except:
  pass # or whatever

答案 3 :(得分:0)

如果您希望两个函数的异常都由相同的except子句处理,那么使用内部try / finally块:

try:
    try:
        foo()
    finally:
        bar()
except Exception:
    print 'error'

如果foo()中存在异常,则会执行第一个bar(),然后执行except子句。

但是,将最少量的代码放在try块中通常是一种好习惯,因此每个函数的单独异常处理程序可能是最好的。

答案 4 :(得分:0)

如果您只有两个函数foo()bar(),请检查其他解决方案。如果你需要运行很多行,请尝试类似这样的例子:

def foo():
    raise Exception('foo_message')
def bar():
    print'bar is ok'
def foobar():
    raise  Exception('foobar_message')

functions_to_run = [
     foo,
     bar,
     foobar,
]

for f in functions_to_run:
    try:
        f()
    except Exception as e:
        print '[Warning] in [{}]: [{}]'.format(f.__name__,e)

结果:

[Warning] in [foo]: [foo_message]
bar is ok
[Warning] in [foobar]: [foobar_message]