调用者如何知道在Python中调用者执行过程中是否引发了异常?


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()

所以在这种情况下没有到达主异常

最新更新