为什么inspect.stack()不能正常工作?

时间:2014-09-29 13:55:50

标签: python stack

我正在尝试写当前执行函数的名称。但它不能正常工作。 当我将'print inspect.stack()[0][3]'放在def func()之后,它可以正常工作,但当我尝试将此命令放在if之后时,它什么都不打印。

import inspect

debug = True

def debug():
    print inspect.stack()[0][3]
    if debug==True:
        print "test"
        print inspect.stack()[0][3]

debug()

返回'debug',但应该返回

'debug'\n'test'\n'debug'

问题出在哪里?

2 个答案:

答案 0 :(得分:1)

定义函数时:

def debug():

您正在从全局范围中删除对先前创建的变量debug的最后一个引用。您将debug变量从包含True的布尔值重新定义为函数引用。因此不满足条件debug==True(因为debug现在是一个函数,而不是布尔值)。因此只有第一个print语句有效(参见an illustrative demo)。

这将按预期工作,例如:

import inspect

debug = True

def f():
    print inspect.stack()[0][3]
    if debug==True:
        print "test"
        print inspect.stack()[0][3]

f()

这是Python中常见的错误,尤其是习惯于其他语言的人,其中函数名称以特殊方式处理。在Python中它们不是 - 在定义函数之后,您可以将其名称用作任何其他变量。这有很多优点,但有时可能会让人感到困惑。

答案 1 :(得分:0)

在python 3和high中你需要使用print()if。如果您没有()

,它将成为语法错误并且不会打印任何内容