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