मैं वकालत नहीं कर रहा है कि यह कभी एक अच्छा विचार हो सकता है, लेकिन मैं पाया है कि आप एक बड़ा पर्याप्त इनपुट स्ट्रिंग पर eval
चलाकर अजगर (2.7 और 3.2 की जाँच) दुर्घटना कर सकते हैं:पायथन के eval की लंबाई सीमा क्यों है?
def kill_python(N):
S = '+'.join((str(n) for n in xrange(N)))
return eval(S)
पर अपने कंप्यूटर S
ठीक उत्पन्न किया जा सकता है, लेकिन लगभग N>74900
के मूल्यों के लिए, अजगर Segmentation fault (core dumped)
साथ असफल हो जायेगी। क्या स्ट्रिंग (या पार्स पेड़) की लंबाई की सीमा है जो दुभाषिया संभाल सकता है?
नोट: मैं जरूरत नहीं है ऐसा करने के लिए, यह मेरे लिए क्या बॉक्स के अंदर चला जाता है की मेरी अज्ञानता को दर्शाती एक गहरी सवाल है। मैं समझना चाहता हूं कि क्यों पाइथन यहां विफल रहता है, और इतनी विनाशकारी (क्यों अपवाद फेंक नहीं?)
IIRC, पायथन दुभाषिया segfaulting किसी भी स्थिति में एक बग माना जाता है, और ऐसा नहीं होना चाहिए - यह एक [बग रिपोर्ट] के लायक हो सकता है (http://bugs.python.org/)। –
@ लैटवेयर: ज्यादातर स्थितियों में, सभी नहीं। लेकिन यह एक * एक बग माना जाना चाहिए। –
दिलचस्प है, 'राशि (xrange (75000))' ठीक से काम करने लगता है – inspectorG4dget