我生成使用python的(2.7)eval()
功能,像这样一个条件语句:python有条件(if)语句的最大长度是多少?
my_list = ['2 > 1','3 > 2','4 > 3']
if eval('(' + ') or ('.join(my_list) + ')'):
print 'yes'
else:
print 'no'
在我的情况下,由代码生成的列表,my_list来自一个参数文件,并且该列表加入了与“或'条件表达式中的语句。上面的代码打印“是”。
它适用于小列表,但在eval()
语句中的特定字符数中出现字符串错误。
一些网站的搜索找到这些线程指向了一个错误:
但他们最大的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
和代码工作正常...
如果由代码产生条件列表,他们为什么不马上在产生评估?为什么转换为字符串呢? –
@OliverW。条件来自配置文件。因为它们是'或'的陈述,所以我没有看到如何一次评估一个。我想我可以有一个布尔标志,开始为False,然后设置为True,如果其中一个'if'语句评估为True。 – philshem