为什么 eval 函数有限制?

Why is there a limit on the eval function?

为什么当范围数增加时这段代码会出错? 他92岁上班,你不能再赌了

import random
from random import randint
masz = []
pmasz = '('
n = 0
for i in range(92):    
    masz.append(str(randint(-10000, +10000)))   
    masz.append(random.choice(['+', '-', '*', '/'])) 
    pmasz += masz[n] +")" + masz[n+1]
    n += 2 
print(eval((n//2-1)*"("+pmasz[:-1]))

问题是由于括号嵌套太深。这是一个可能无法修复的已知问题。 您可以阅读详情here.

您可以通过评估中间结果来限制嵌套深度来避免该问题。

我还建议使用 ast.literal_eval,这比使用 eval 更安全。