Почему существует ограничение на длину eval в Python?

Я не утверждаю, что это когда-либо было бы хорошей идеей, но я обнаружил, что вы можете сломать Python (2.7 и 3.2 с проверкой ), запустив evalна достаточно большой входной строке:

def kill_python(N):
    S = '+'.join((str(n) for n in xrange(N)))
    return eval(S)

На моем компьютере Sможет быть сгенерировано просто отлично, но для значений приблизительно N>74900Python не сработает с Segmentation fault (core dumped). Есть ли ограничение на длину строки (или дерева синтаксического анализа ), которое интерпретатор может обработать?

Примечание:Мне не нужно делать это, для меня это более глубокий вопрос, отражающий мое незнание того, что происходит внутри коробки. Я хотел бы понять, почему Python здесь терпит неудачу, и так катастрофически (почему бы не бросить исключение?)

23
задан Hooked 24 July 2012 в 16:23
поделиться