e.g。
try:
foo()
bar()
except:
pass
当foo函数引发异常时,如何跳到下一行(bar)并执行它?
答案 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]