我生成的python程序的一部分,生成的代码包含很多嵌套if/ else,我的问题是很多可能太多了,我在运行代码时遇到了这个错误:
IndentationError:缩进级别太多
我已经读到这是python解释器的低级别定义的一些限制,是否有人知道如何找到它的解决方法?一些解释器参数会很好,我发现的唯一解决方案建议重新编译Python以便为MAXINDENT常量设置不同的值,这不是我梦寐以求的.
编辑:代码是一大堆嵌套if...else,它很脏但是我发现将复杂的决策树移植到Python是最快的.我知道它有多脏; 我自己没有写它 - 我甚至没有计划编辑它(我宁愿触摸发生器).
我知道我可以用其他时尚来模拟这个决策树.我想要的是一种比这更简单的方法,比如在可能的情况下调整解释器.
编辑2:现在我做了一些重构,我的树被存储为字典:文件的加载给出了一个新的错误:
s_push:解析器堆栈溢出
MemoryError
在这里我再次找到了一个资源,建议对解释器的标题进行一些调整.
您可以拥有动态生成的深层嵌套结构,例如,〜100个嵌套级别列表导致作为s_push: parser stack overflow字符串文字,但如果您从json文本动态创建它,它就可以工作,例如:
import ast
import json
N = 100
s = "["*N + "123" +"]"*N
L1 = json.loads(s)
def flatten(L):
for el in L:
try:
for item in flatten(el):
yield item
except TypeError:
yield el
assert next(flatten(L1)) == 123
print("json ok")
L2 = ast.literal_eval(s) # raises MemoryError
Run Code Online (Sandbox Code Playgroud)