No estoy abogando por que este nunca sería una buena idea, pero he encontrado que puede chocar Python (2,7 y 3,2 marcada) mediante la ejecución de eval
en una gran cadena de entrada es suficiente:¿Por qué hay un límite de longitud para la evaluación de Python?
def kill_python(N):
S = '+'.join((str(n) for n in xrange(N)))
return eval(S)
En mi computadora S
se puede generar muy bien, pero para valores de aproximadamente N>74900
, Python fallará con Segmentation fault (core dumped)
. ¿Existe un límite en la longitud de la cadena (o árbol de análisis sintáctico) que el intérprete puede manejar?
Nota: No necesito hacer esto, para mí esto es una cuestión más profunda que refleja mi ignorancia de lo que sucede dentro de la caja. Me gustaría entender por qué Python falla aquí, y tan catastróficamente (¿por qué no lanzar una excepción?)
IIRC, el intérprete de intérpretes de Python se considera un error en cualquier situación, y no debería ocurrir; podría valer un [informe de error] (http://bugs.python.org/). –
@Lattyware: en la mayoría de las situaciones, no en todas. Pero este * debería * ser considerado un error. –
Curiosamente, 'sum (xrange (75000))' parece funcionar bien – inspectorG4dget