Too Many if Statements?

Florian Diesch diesch at spamfence.net
Thu Feb 9 01:44:38 EST 2006


Alan Morgan <amorgan at xenon.Stanford.EDU> wrote:
> In article <GU8Gf.22899$Jd.6095 at newssvr25.news.prodigy.net>,
> Bryan Olson  <fakeaddress at nowhere.org> wrote:
>>Alan Morgan wrote:
>>> slogging_away wrote:
>>> 
>>>>Hi - I'm running Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310
>>>>32 bit (Intel)] on win32, and have a script that makes numerous checks
>>>>on text files, (configuration files), so discrepancies can be reported.
>>>>The script works fine but it appears that I may have hit a wall with
>>>>'if' statements.
>>>>
>>> I generated files with 10000, 25000, and 50000 simple if statements and ran
>>> them.  10000 was okay, 25000 gave a bizarre internal error, and 50000 segfaulted
>>> and died.  My system has plenty of memory and it isn't obvious to me why python
>>> should be so bothered about this.  I'm not sure why I can have 10x the number of
>>> if statements that cause you trouble.  There might be some overall limitation
>>> on the number of statements in a file.
>>
>>I made a script with 100,000 if's, (code below) and it appears
>>to work on a couple systems, including Python 2.4.2 on Win32-XP.
>>So at first cut, it doesn't seem to be just the if-count that
>>triggers the bug.
>
> Mine was a simple
>
> #!/usr/local/bin/python
>
> zot=24999
> if zot == 0:
>   print "It's 0"
>
> if zot == 1:
>   print "It's 1"
>
> ....
>
> if zot == 24999:
>   print "It's 24999"
>
> generated (I'm ashamed to admit) by a perl script.  Is there any good
> reason why it is failing?  I'd prefer a "Too many silly walks in your
> program.  Reduce!" to a crash.  I could experiment with putting the
> matching 'if' at the beginning rather than at the end, but I'm not
> sure what that would tell me.


Here[1] it works with 400000 (with 500000 it starts swapping too much) 
"if"-statements generated by

==========================================
#!/usr/bin/env python

print """#!/usr/bin/env python

zot=24999
"""

for i in range(0, 400000):
 print """
if zot == %d:
   print "It's %d"
 """%(i,i)
     
============================================


[1] Python 2.4.2 (#2, Sep 30 2005, 21:19:01) 
[GCC 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu8)]



   Florian
-- 
No no no! In maths things are usually named after Euler, or the first
person to discover them after Euler.
[Steven D'Aprano in <pan.2005.11.22.10.29.25.388240 at REMOVETHIScyber.com.au>]



More information about the Python-list mailing list