为什么 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
更安全。
为什么当范围数增加时这段代码会出错? 他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
更安全。