Python缩进错误:缩进级别太多

Python缩进错误:缩进级别太多,python,Python,我已经生成了python程序的一部分,生成的代码包含很多嵌套的if/else,我的问题是很多可能太多,我在运行代码时遇到了以下错误: 缩进错误:缩进级别太多 我已经读到,这是在python解释器的底层定义的一些限制,有人知道我如何找到解决方法吗?一些解释器参数可以,我发现的唯一一个建议是重新编译Python,以便为MAXINDENT常量设置一个不同的值,这并不是我梦寐以求的 编辑:代码是一大串嵌套的如果…否则,它很脏,但这是我发现的将复杂决策树移植到Python的最快方法。我知道它有多脏;我不是

我已经生成了python程序的一部分,生成的代码包含很多嵌套的
if
/
else
,我的问题是很多可能太多,我在运行代码时遇到了以下错误:

缩进错误:缩进级别太多

我已经读到,这是在python解释器的底层定义的一些限制,有人知道我如何找到解决方法吗?一些解释器参数可以,我发现的唯一一个建议是重新编译Python,以便为
MAXINDENT
常量设置一个不同的值,这并不是我梦寐以求的

编辑:代码是一大串嵌套的
如果…否则
,它很脏,但这是我发现的将复杂决策树移植到Python的最快方法。我知道它有多脏;我不是自己写的——我甚至不打算编辑它(我宁愿触摸发电机)

我知道我可以用其他方式对决策树进行建模。我想要的是一种比这更简单的方法,比如如果可能的话调整解释器

编辑2:现在我已经进行了一些重构,我的树存储为一个字典:加载文件时出现了一个新错误:

s_推送:解析器堆栈溢出
记忆者

在这里我又找到了一个资源



您的生成器正在生成错误代码。如果它产生语法上无效的代码,您应该像对待它一样对待它

使用函数、字典调度和任何其他可能发生的事情来减少深度


OTOH,谢谢你告诉我Python确实有最大的深度。我不知道。:)

您可以动态生成深度嵌套的结构,例如,~100嵌套级别列表将导致
s_push:parser stack overflow
作为字符串文本,但如果您从json文本动态创建它,它会起作用:


至于@warvariuc answer,最好的办法是将if-else序列分割成几个函数——每个“if-elif-else”序列对应一个函数,并使用经过授权的生成名称

Python必须解析所有函数,以便能够以任意顺序调用,因此最外层的“if-else”对也必须放在函数中,该函数将在文件末尾调用

换句话说,您现在生成的代码如下所示:

if bla:
    if ble:
        #bla
    else:
        #bli
elif ble:
    #bli
应生成如下所示的内容:

def main(state):
    if bla:
        main_1(state)
    elif ble:
        #bli

def main_1(state):
    if ble:
        #bla
    else:
        #bli

main()

哇!我不知道这是python中的最大缩进!对这一点加以限制似乎有点愚蠢。你给我们的链接说它设置为100,但是…你已经超过了100级缩进?重构你的代码人!就像内部的50%一样,把它放到一个函数中,我无法想象你怎么能达到100级以上的缩进。我可能错了。。。但是嵌套的
如果。。否则
似乎在我耳边低语,我们能看看生成的代码是什么样子吗?或者生成器?
扁平比嵌套好。
重构会导致类似的结果,请参阅我问题中的“编辑2”。。。我正在使用的dictionnary往往与嵌套的if一样大。多亏了这个技巧,我只需要在dictionnary对象周围加上一些引号,这样在json.loads调用之后就可以正常工作了
def main(state):
    if bla:
        main_1(state)
    elif ble:
        #bli

def main_1(state):
    if ble:
        #bla
    else:
        #bli

main()