Я не утверждаю, что это когда-либо было бы хорошей идеей, но я обнаружил, что вы можете сломать Python (2.7 и 3.2 с проверкой ), запустив eval
на достаточно большой входной строке:
def kill_python(N):
S = '+'.join((str(n) for n in xrange(N)))
return eval(S)
На моем компьютере S
может быть сгенерировано просто отлично, но для значений приблизительно N>74900
Python не сработает с Segmentation fault (core dumped)
. Есть ли ограничение на длину строки (или дерева синтаксического анализа ), которое интерпретатор может обработать?
Примечание:Мне не нужно делать это, для меня это более глубокий вопрос, отражающий мое незнание того, что происходит внутри коробки. Я хотел бы понять, почему Python здесь терпит неудачу, и так катастрофически (почему бы не бросить исключение?)