0

在python中,我试图获得递归(dor)的深度。在将所有的 dor 内容添加到我的代码中之前,它工作得很好,但是在添加了 dor 的内容之后,我收到了一个关于我的代码的属性错误。这是我收到错误的功能

 def parse(json,dor=0):
      parse.index[dor]=0
      parse.keyList[dor]=[]
      parse.jsonDict[dor]=dict()
      parse.json[dor]=remove_white(json)
4

1 回答 1

1

免责声明:您所做的很可能是错误的事情

您的代码之前有效,因为(我假设)您在函数对象上设置了一个属性:

def foo():
  foo.bar = 4

运行时,函数对象会为其自身设置一个属性bar。但是,当您添加__setitem__(使用方括号)时:

def foo():
  foo.bar[dor] = 4

您现在说要修改foo.bar,但foo.bar还不存在!在第一次运行它之前,您可以通过手动设置对象来“修复”这个问题:

def foo():
  foo.bar[dor] = 4

foo.bar = {}
foo()

最有可能的是,您希望通过使用单独的对象来跟踪代码中的递归深度来完全避免这种混乱。仅仅因为你可以做某事并不意味着你应该做。

编辑:查看您的代码,您似乎应该使用类而不是函数parse。使用类是有意义的,因为您使用一组作用于它的方法来封装可变状态。当然,我也有义务向您指出标准库 JSON 模块

于 2013-01-24T06:45:00.203 回答