2014-09-29 214 views
1

我试图写出当前执行的函数的名称。但它不能正常工作。 当我在def func()后面加上'print inspect.stack()[0][3]'时,它可以工作,但是当我尝试在if后面加上这个命令时,它不会打印任何东西。为什么inspect.stack()无法正常工作?

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' 

问题出在哪里?

回答

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中,它们不是 - 在定义函数之后,可以将其名称用作其他变量。这有很多优点,但如此处所示有时可能会造成混淆。

+0

当然,它应该只是__if调试:__ – volcano 2014-09-29 14:23:18

0

在python 3和hight中,你需要使用print()if。它成为一个语法错误,不会打印任何东西,如果你没有()

+0

该OP说,代码运行没有错误,所以显然这不是关于Python 3. – BartoszKP 2014-09-29 14:08:22

相关问题