Too Many if Statements?
Bryan Olson
fakeaddress at nowhere.org
Tue Feb 7 17:09:42 EST 2006
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.
>>
>>Due to the number of checks perfromed by the script on the text files,
>>(over 500), there are quite a few 'if' statements in the script, (over
>>1150). It seems that it is at the point that when I add any additional
>>'if' statements the script will not run. No error is produced - it
>>just returns to the python prompt much the same as when a successful
>>'Check Module' command is selected. If I delete some other 'if'
>>statements the new ones work so it appears that it has hit a limit on
>>the number of 'if' statements. This has stunted any further checks for
>>the script to make on the text files.
>>
>>Hs anyone ever run into this sort of thing?
>
>
> 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.
Code that does *not* demo the error on my systems:
#! /usr/bin/env python
lines = ["""#! /usr/bin/env python
import random
c = 0
n = random.randrange(10L**10)
"""]
for i in range(100000):
lines.append('if n % random.randrange(2, 1000) == 0: c += 1')
lines.append('print c')
lines.append('##############')
progtext = '\n'.join(lines)
f = file('manyifs.py', 'w')
f.write(progtext)
f.close()
exec progtext
--
--Bryan
More information about the Python-list
mailing list