Существует ли максимальная длина для условного (if) оператора python?

Я генерирую условный оператор, используя функцию eval() python ():

 my_list = ['2 > 1','3 > 2','4 > 3'] if eval('(' + ') or ('.join(my_list) + ')'): print 'yes' else: print 'no' 

В моем случае список генерируется кодом, my_list происходит из файла параметров, а список объединяется с операторами или или в условном выражении. Вышеприведенный код выводит «да».

Он отлично работает для небольших списков, но при определенном числе символов в выражении eval() и я получаю строчную ошибку.

Некоторые поиски обнаруживают эти потоки, указывающие на ошибку:

  • Почему существует предел длины для eval python?

  • ошибка сегментации в вычислении pi (python)

Но их максимальный размер 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 

и код работает отлично …

    Возможно, я что-то упустил, но казалось бы, что:

     any(map(eval, my_list)) 

    Что именно вы хотите.

     from itertools import imap any(imap(eval, my_list)) # Python 2. 

    Это имеет приятный эффект от оценки остальной части списка, если первый элемент имеет значение True (также называемое «короткое замыкание»). Это может быть или не быть тем, что вам нужно.

    Пример:

     > any(map(eval, ['2 > 1','3 > 2','4 > 3'])) True