如何在Python';让我们试试街区?

如何在Python';让我们试试街区?,python,exception,Python,Exception,e、 g 当foo函数引发异常时,如何跳到下一行(bar)并执行它?从try块中取出bar(): try: foo() bar() except: pass 顺便说一句,注意除条款外的所有条款。宁愿有选择地捕获您知道可以处理/忽略的异常。如果对条的调用在try-块内,则无法执行。您必须将调用置于try-except块之外,或者使用else: try: foo() except: pass bar() 如果bar也可能引发异常,则必须为bar使用单独

e、 g

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

try
块中取出
bar()

try:
    foo()
    bar()
except: 
    pass

顺便说一句,注意除条款外的所有条款。宁愿有选择地捕获您知道可以处理/忽略的异常。

如果对
条的调用在
try
-块内,则无法执行。您必须将调用置于try-except块之外,或者使用
else

try:
    foo()
except: 
    pass
bar()

如果
bar
也可能引发异常,则必须为
bar
使用单独的
try
块,这不是try/except块的预期使用方式。如果即使
foo()
失败,也应执行
bar()
,则应将每个应用程序放入各自的try/except块:

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

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

try:
  foo()
except:
  pass # or whatever

try:
  bar()
except:
  pass # or whatever
如果
foo()
中存在异常,将首先执行
bar()
,然后执行except子句


但是,通常最好在try块中放入最少的代码量,因此最好为每个函数单独设置一个异常处理程序。

如果只有两个函数foo()bar(),请检查其他解决方案。如果需要运行很多行,请尝试以下示例:

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

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)

一种更好的裸例外形式是
例外例外:
,因为它不会捕获键盘中断或系统退出之类的内容。所以,如果这是一个紧密的循环,你仍然可以突破^C。
[Warning] in [foo]: [foo_message]
bar is ok
[Warning] in [foobar]: [foobar_message]