Python中使用eval()函数计算表达式时的长度限制

3

考虑以下示例

a = "( False or False )  and  not  ( False and True and False )  and   not  ( False and True and False ) "

print eval(a)

b = "( False or False or False or False or False or False or True or False or False or False or False or False or False or False or False or False or False or False )  and  not False and  not False and  not  ( False and False )  and  not  ( False and False )  and  not  ( False and False )  and  not  ( False and False )  and  not  ( False and False )  and  not  ( False and False )  and  not  ( False and True )  and  not  ( False and False )  and  not  ( False and False )  and  not  ( False and False )  and  not  ( False and False )  and  not  ( False and False) and not False"
print eval(b)

第一个输出结果正确。但是对于第二个,尽管语法正确,却无法输出。

SyntaxError: EOL while scanning string literal

因为长度问题,我需要在程序中评估大型表达式。有什么建议吗?

1
在我的情况下,它运行得很好。请检查您的编辑器设置或尝试打印。 - ajay_t
请提供更多细节,比如你正在使用的Python版本是哪个? - nalinc
适用于我,2.7.9和3.4.2版本。为什么不试试能否计算出最大值呢?b = 'False or False',然后尝试:while True: b.append(b[5:]); eval(b); except SyntaxError.... len(b) - Harvey
1个回答

2

试图通过经验找到极限:

b = 'False or False'
while True:
    try:
        b = b + b[5:]
        print len(b), eval(b)
    except:
        print len(b)
        break

在 b 的长度达到 288MiB 时,我停止了。有趣的是,Python 在 288MiB 级别时使用了高达 5.5GiB 的内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接