Non sto sostenendo che questo avrebbe mai una buona idea, ma ho scoperto che si può mandare in crash Python (2.7 e 3.2 controllato) eseguendo eval
su un grande stringa di input abbastanza:Perché c'è un limite di lunghezza all'eval di Python?
def kill_python(N):
S = '+'.join((str(n) for n in xrange(N)))
return eval(S)
On il mio computer S
può essere generato bene, ma per valori di circa N>74900
, Python fallirà con Segmentation fault (core dumped)
. Esiste un limite alla lunghezza della stringa (o dell'albero di analisi) che l'interprete può gestire?
Nota: Non ho bisogno per fare questo, per me questa è una domanda più profonda che riflette la mia ignoranza di ciò che accade all'interno della scatola. Mi piacerebbe capire perché Python fallisce qui, e in modo così catastrofico (perché non lanciare un'eccezione?)
IIRC, l'interprete Python segfaulting è considerato un bug in qualsiasi situazione, e non dovrebbe accadere - questo potrebbe valere un [bug report] (http://bugs.python.org/). –
@Lattyware: nella maggior parte delle situazioni, non tutte. Ma questo * dovrebbe * essere considerato un bug. –
Interessante, 'sum (xrange (75000))' sembra funzionare bene – inspectorG4dget