如何在Python';让我们试试街区?
e、 g 当foo函数引发异常时,如何跳到下一行(bar)并执行它?从如何在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使用单独
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]