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

How*_*ard 5 python exception

例如

try:
    foo()
    bar()
except: 
    pass
Run Code Online (Sandbox Code Playgroud)

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

Fre*_*Foo 9

就拿bar()出的try块:

try:
    foo()
except: 
    pass
bar()
Run Code Online (Sandbox Code Playgroud)

顺便说一下,请注意全能except条款.更喜欢有选择地捕获您知道可以处理/忽略的异常.

  • 一个更好的裸形式除了'除了异常:`,因为这不会捕获像KeyboardInterrupt或SystemExit这样的东西.所以,如果这个问题陷入紧张的环境,你仍然可以用^ C打破. (2认同)

ntg*_*ntg 8

如果您只有两个函数 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)
Run Code Online (Sandbox Code Playgroud)

结果:

[Warning] in [foo]: [foo_message]
bar is ok
[Warning] in [foobar]: [foobar_message]
Run Code Online (Sandbox Code Playgroud)


Som*_*ude 6

如果调用bar是在try-block 内,则无法完成.您必须将调用置于try-except块之外,或使用else:

try:
    foo()
except:
    pass
else:
    bar()
Run Code Online (Sandbox Code Playgroud)

如果bar也可能抛出异常,则必须使用单独的trybar.