区块链技术博客
www.b2bchain.cn

inspect.getargvalues()引发异常“ AttributeError:'tuple'对象没有属性'f_code'” – python程序员分享

本文介绍了inspect.getargvalues()引发异常“ AttributeError:'tuple'对象没有属性'f_code'” – python程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我正在尝试使用Python的inspect模块(在Python 2中)显示有关调用当前函数的函数的信息,包括其参数。

这是一个简单的测试程序:

import inspect  def caller_args():     frame = inspect.currentframe()     outer_frames = inspect.getouterframes(frame)     caller_frame = outer_frames[1]     return inspect.getargvalues(caller_frame)  def fun_a(arg1):     print caller_args()  def fun_b():     fun_a('foo')  if __name__ == '__main__':     fun_b() 

当我运行它时会发生这种情况:

$ python getargvalues_test.py Traceback (most recent call last):   File "getargvalues_test.py", line 16, in <module>     fun_b()   File "getargvalues_test.py", line 13, in fun_b     fun_a('foo')   File "getargvalues_test.py", line 10, in fun_a     print caller_args()   File "getargvalues_test.py", line 7, in caller_args     return inspect.getargvalues(caller_frame)   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 829, in getargvalues     args, varargs, varkw = getargs(frame.f_code) AttributeError: 'tuple' object has no attribute 'f_code' 

我已经搜索了AttributeError异常,但是没有运气。我究竟做错了什么?

(从那以后我就发现了问题,所以我在这里提问并回答,以便将来有此问题的任何人都可以在这里找到答案。)

python大神给出的解决方案

This similar question帮助我发现了问题。

inspect模块的Python documentation提及“框架记录”和“框架对象”,并说明了区别。

inspect.currentframe()返回一个框架对象,但是
inspect.getouterframes()返回帧记录列表。

上面代码中的错误不是没有从调用函数的框架记录中提取框架对象,而是将框架记录而不是框架对象传递给inspect.getouterframes()。 (请注意,inspect.getouterframes()不会检查其参数是否为框架对象。)

这是caller_args()的固定定义(更改为caller_frame的分配):

def caller_args():     frame = inspect.currentframe()     outer_frames = inspect.getouterframes(frame)     caller_frame = outer_frames[1][0]     return inspect.getargvalues(caller_frame) 

根据需要运行:

$ python getargvalues_test_fixed.py ArgInfo(args=['arg1'], varargs=None, keywords=None, locals={'arg1': 'foo'}) 

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » inspect.getargvalues()引发异常“ AttributeError:'tuple'对象没有属性'f_code'” – python程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们