我使用Python的eval()
函数生成一个条件语句,代码如下(版本为2.7):
my_list = ['2 > 1','3 > 2','4 > 3']
if eval('(' + ') or ('.join(my_list) + ')'):
print 'yes'
else:
print 'no'
在我的情况下,列表是由代码生成的,my_list来自参数文件,并且该列表与'or'语句连接在条件表达式中。上面的代码打印出'yes'。
对于小型列表,它可以正常工作,但在eval()
语句中达到一定数量的字符后,我会收到一个字符串错误。
一些搜索发现了这些线程,指向一个错误:
但是他们的max eval()大小比我找到的要大得多。在我的情况下,我发现1744到1803个字符之间出现了问题。我尝试了这段代码,它确实在两个语句之间崩溃了。
>>> eval("1.0*"*10000+"1.0")
1.0
>>> eval("1.0*"*100000+"1.0")
# segfault here
所以,这让我认为问题不在于eval()函数,而是在于if语句中的某个最大值。
有没有另一种有条件地应用列表规则的方法,而不涉及长字符串和eval()函数?
有趣的是,我让my_list变得更大了:
my_list = ['2 > 1']*1000000
而且代码可以正常工作...