调用自定义分析器时,在python中抛出了奇怪的异常

时间:2017-03-10 09:27:27

标签: python profile

我写了一个如下的探查器演示:

# python version is 2.7.10
import inspect

def _profiler(frame, event, arg):
    print 'name:', frame.f_code.co_name
    print 'is_function:', inspect.isfunction(arg)


import sys

sys.setprofile(_profiler)

def orz():
    print 'why?'

orz()

然后我就这样出来了:

name: orz
is_function: False
why?
name: orz
is_function: False
name: <module>
is_function: False
name: _remove
is_function:Exception AttributeError: "'NoneType' object has no attribute 'isfunction'" in <function _remove at 0x7fb32707c668> ignored

这让我很困惑。此问题由inspect.isfunction引起。我尝试在函数_profile中使用了许多其他模块,它们都有同样的错误:

Exception AttributeError: "'NoneType' object has no attribute 'XXX'" in <function _remove at XXX> ignored

如果我没有在_profiler中使用任何模块,那么程序就可以运行了。

为什么?

1 个答案:

答案 0 :(得分:1)

显然,在代码末尾添加sys.setprofile(None)会删除该异常。我还没有窥探代码,但似乎它正在尝试在执行后删除函数,但由于堆栈是空的,它试图删除任何内容