Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
给出TypeError的Python方法正好接受9个参数(给出8个)_Python_Methods_Arguments_Typeerror_Trace - Fatal编程技术网

给出TypeError的Python方法正好接受9个参数(给出8个)

给出TypeError的Python方法正好接受9个参数(给出8个),python,methods,arguments,typeerror,trace,Python,Methods,Arguments,Typeerror,Trace,调用Python方法(2.7.2)时,我遇到了一个关于#个参数的类型错误。我在网上发现的大多数类似问题都是在人们忘记“自我”也是一个参数()时出现的。或者,当某人忘记连接参数时(如) 我不确定这是否也是一个“自我”问题,但它似乎有所不同。我基本上得到了一个错误,我没有足够的参数,即使我计数足够多。在我的追踪中: -> message += XMLProcessor(zf, root, filepath, tag_type, display_name, containers, depth,

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

我不确定这是否也是一个“自我”问题,但它似乎有所不同。我基本上得到了一个错误,我没有足够的参数,即使我计数足够多。在我的追踪中:

-> message += XMLProcessor(zf, root, filepath, tag_type, display_name, containers, depth, message, username)
(Pdb) n
TypeError: 'XMLProcessor() takes exactly 9 arguments (8 given)'
现在,我已经数了很多次了,我发誓有9个论点。但我可能弄错了或者遗漏了一些关键的东西?这个方法不是类的一部分,所以我假设“self”不是一个问题……我觉得我对某些东西缺少基本的理解,但不确定是什么

########## 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在我的调试器中提供的代码:

(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文件并重新运行代码…无帮助:

(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”参数错误,而Update#2中的“10”参数错误是在外部调用中触发的。因为我在外部调用之前设置了我的trace(),所以对我来说这两个错误看起来都是一样的——好像它们来自我的外部调用……啊!!!感谢大家的帮助--我需要学习调试技术,并从中学习了一些有用的技巧。

正如建议的那样,我将解决方案发布在这里,以使其更加明显


TLDR


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


原职


解决了


正如我在评论中所指出的,这与过时的字节码无关(尽管这听起来像是我将来一定要调查的事情),但更多的是编码人员的疏忽。我正在修改其他人的遗留代码,结果证明XMLProcessor是一种递归方法。我没有修改新参数的内部递归方法调用。因此,“8”参数错误实际上是在内部调用时触发的,而Update#2中的“10”参数错误是在外部调用时触发的。因为我在外部调用之前设置了我的trace(),所以对我来说这两个错误看起来都是一样的——好像它们来自我的外部调用……啊!!!谢谢大家的帮助--我需要学习调试技术,从中我学到了一些有用的技巧。

您重新启动了流程吗?是否有可能加载过时的字节码?您看到的源代码不一定是Python正在运行的代码;字节码是通过指向源代码中特定行号的指针来执行的,如果在此期间源代码发生了更改,您将看到与正在运行的代码不同的代码。正如Martijn Pieters所说,字节码可能已经过时。你的代码对我有用。当你在调试器中遇到这个问题时,你能运行
import-inspect,dis;dis.dis(inspect.currentframe().f_code)
并将输出粘贴到此处?这将显示正在运行的实际字节码,作为反汇编。其他人也可以确认给定的代码是否有效吗?我只是传递
None
作为所有参数值。。。请确认某人?所以我发现这是一个非常愚蠢的错误,与参数类型无关。我正在修改遗留代码,XMLProcessor是一个递归函数——我错过了更新方法内部的递归方法调用。因此,最初的“8”错误出现在内部调用上,而我在Update#2中发布的“10”错误出现在外部调用上。因为我的跟踪是在方法之外运行的,所以对我来说,两个错误看起来是一样的!愚蠢…基于此,我将在我的工具包中添加一些调试技巧。谢谢大家!