首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给TypeError的Python方法正好有9个参数(8个给定)

给TypeError的Python方法正好有9个参数(8个给定)
EN

Stack Overflow用户
提问于 2013-10-01 17:13:24
回答 1查看 751关注 0票数 0

在调用Python (2.7.2)时,我遇到了一个关于参数#的TypeError。我在网上发现的大多数类似的问题都发生在人们忘记“自我”也是一个参数(sample SO question)时。或者,当某人忘记连接参数时(如here)。

我不知道这是否也是一个“自我”的问题,但似乎是不同的。我基本上收到了一个错误,即我没有足够的参数参数,尽管我计算得足够多。在我的追踪中:

代码语言:javascript
运行
复制
-> message += XMLProcessor(zf, root, filepath, tag_type, display_name, containers, depth, message, username)
(Pdb) n
TypeError: 'XMLProcessor() takes exactly 9 arguments (8 given)'

现在,我已经数了好几次了,我发誓有9个论点。但我可能弄错了或者遗漏了一些重要的东西?这个方法不是类的一部分,所以我假设“自我”不是一个问题.我觉得我缺少对某些东西的基本理解,但不确定是什么。

代码语言:javascript
运行
复制
########## Function: XMLProcessor #################
# This does the work of examining the XML and traversing it.
####################################################
def XMLProcessor(zf, root, filepath, tag_type, display_name, containers, depth, message, username):

有人能解释一下为什么在这种情况下9 != 9吗?

谢谢!

更新#1

所以我不知道这意味着什么,但是运行Martijn在我的调试器中提供的代码:

代码语言:javascript
运行
复制
(Pdb) import inspect, dis;
(Pdb) dis.dis(inspect.currentframe().f_code)
  1           0 LOAD_NAME                0 (dis)
              3 LOAD_ATTR                0 (dis)
              6 LOAD_NAME                1 (inspect)
              9 LOAD_ATTR                2 (currentframe)
             12 CALL_FUNCTION            0
             15 LOAD_ATTR                3 (f_code)
             18 CALL_FUNCTION            1
             21 PRINT_EXPR          
             22 LOAD_CONST               0 (None)
             25 RETURN_VALUE        
(Pdb) 

更新#2

我仍然试图提高dis的速度,但我发现我的代码试图忽略确切的9个参数是一种讽刺。另外,我已经清除了我的*.pyc文件并重新运行了我的code...no帮助:

代码语言:javascript
运行
复制
(Pdb) XMLProcessor(zf, root, filepath, tag_type, display_name, containers, depth, message, username)
*** TypeError: XMLProcessor() takes exactly 9 arguments (8 given)
(Pdb) XMLProcessor(zf, root, filepath, tag_type, display_name, containers, depth, message, username, '')
*** TypeError: XMLProcessor() takes exactly 9 arguments (10 given)

解决了!

正如我在评论中所指出的,这最终与过时的字节码无关(虽然这听起来像是我将来一定要研究的事情),但是更多的编码器疏忽。我正在修改其他人的遗留代码,发现XMLProcessor是一种递归方法。而且我没有修改新参数的内部递归方法调用,因此"8“参数错误实际上是在内部调用上触发的,而更新2中的"10”参数错误是在外部调用中触发的。由于我在外部调用之前设置了跟踪(),在我看来,这两个错误看起来都是一样的--就好像它们是来自我的外部call...Gah!谢谢大家的帮助--我需要研究一下我的调试技术,我从中学到了一些有用的技巧。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-10 12:28:35

正如建议的那样,我在这里发布解决方案是为了使它更加明显。

TLDR

遗留方法(XMLProcessor)是递归的,TypeError是在方法定义中的递归调用中触发的。我在方法之外追踪,却没有意识到这一点。

原始员额

解决了!

正如我在评论中所指出的,这最终与过时的字节码无关(虽然这听起来像是我将来一定要研究的事情),但是更多的编码器疏忽。我正在修改其他人的遗留代码,结果发现XMLProcessor是一种递归方法。我没有修改新参数的内部递归方法调用。因此,"8“参数错误实际上是在内部调用上触发的,而更新2中的"10”参数错误是在外部调用中触发的。由于我在外部调用之前设置了跟踪(),在我看来,这两个错误看起来都是一样的--就好像它们是来自我的外部call...Gah!谢谢大家的帮助--我需要研究一下我的调试技术,我从中学到了一些有用的技巧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19122118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档