在Python中,如果函数定义在main之后,为什么输出不同?

2024-06-17 13:30:58 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码的输出不同,如果:

def foo():
    try:
        print 1/0
    except Exception:
        return  'Caught in foo'

try:
    print 'FOOO'
    print foo()
except Exception:
    print 'Caught in main'

输出:FOOO\n在foo中捕获

try:
    print 'FOOO'
    print foo()
except Exception:
    print 'Caught in main'


def foo():
    try:
        print 1/0
    except Exception:
        return  'Caught in foo'

输出:FOOO\n在main中捕获

为什么两种情况下的输出不同?你知道吗


Tags: 代码inreturnfoomaindefexception情况
3条回答

在第一种情况下,会出现以下错误:

ZeroDivisionError: integer division or modulo by zero

在第二种情况下,你会得到:

NameError: name 'foo' is not defined

第二个是因为调用foo()函数时还没有定义它。你知道吗

因为他们提出了不同的例外。你知道吗

All built-in, non-system-exiting exceptions are derived from ^{}except Exception捕获大多数异常,这种行为常常令人困惑。你知道吗

您应该始终捕获特定的异常,例如1/0引发^{},您应该只捕获:

try:
    print 'FOOO'
    print foo()
except ZeroDivisionError:
    print 'Caught in foo'

您将在输出中看到不同的错误

FOOO
Traceback (most recent call last):
  File "<file>", line 3, in <module>
    print (foo())
NameError: name 'foo' is not defined

因为它没有被except ZeroDivisionError捕获(issubclass(NameError, ZeroDivisionError)False)。你知道吗

因为在第二种情况下,例外情况是:

NameError: name 'foo' is not defined

尝试不要在main中捕获异常,或者print捕获它。foo不是由您尝试调用它的时间定义的。你知道吗

相关问题 更多 >