def foo():
try:
do_something()
except:
raise
handle exception
def bar():
try:
foo()
except:
print 'Error occurred in foo()'
bar
如何知道foo
引发了异常?
同样,下面的代码输出是不同的,如果:
def foo():
try:
print 1/0
except Exception:
return 'Caught in foo'
try:
print 'FOOO'
print foo()
except Exception:
print 'Caught in main'
OUTPUT
: foo n catch in foo
try:
print 'FOOO'
print foo()
except Exception:
print 'Caught in main'
def foo():
try:
print 1/0
except Exception:
return 'Caught in foo'
OUTPUT
: foo n catch in main
为什么两种情况下的输出不同?
我建议你在做异常处理时打印异常消息
执行以下代码
try:
print 'FOOO'
print foo()
except Exception, err:
print 'Caught in main: {}'.format(err)
def foo():
try:
print 1/0
except Exception, err:
return 'Caught in foo: {}'.format(err)
你:
FOOO
Caught in main: name 'foo' is not defined
因为foo方法还没有被解释
但是当你这样做的时候:
def foo():
try:
print 1/0
except Exception , err:
return 'Caught in foo: {}'.format(err)
try:
print 'FOOO'
print foo()
except Exception , err:
print 'Caught in main: {}'.format(err)
你:
FOOO
Caught in foo: integer division or modulo by zero
因为解释器已经知道foo,并且异常的返回消息由您的行打印:
print foo()
所以在这种情况下没有到达主异常