On 11/30/2009 8:12 AM, markolopa wrote:
Hi,

On 18 Sep, 10:36, "markol...@gmail.com"<markol...@gmail.com>  wrote:
On Sep 11, 7:36 pm, Johan Grönqvist<johan.gronqv...@gmail.com>  wrote:
I find several places in my code where I would like tohavea variable
scope that is smaller than the enclosing function/class/module definition.

This is one of the single major frustrations I have with Python and an
important source of bugs for me. Here is a typical situation

Here is another bug that I just got. Twenty minutes lost to find it...

class ValueColumn(AbstractColumn):
     def __init__(self, name, header, domain_names):
         if type(domain_names) != tuple:
             raise ValueError('a tuple of domain names must be given')
         for name in domain_names:
             if type(name) != str:
                 raise ValueError('a tuple of domain names must be
given')
         self.domain_names = domain_names
         super(ValueColumn, self).__init__(name, header)

The upper class was initialized with the wrong name, because the for
loop to check
domain_names used "name" which is also the argument to be passed.

If is an old thread but I am reopening to present real situation where
this Python
"feature" bothers me...


here is another bug you might have if python have an "even-more-local" scope:

while True:
    s = raw_input("enter something: ")
    if s not in ('q', 'quit', 'exit'): break
print s

if the while block has become its own namespace; print s would generate NameError.

It is one or the other, you will have problem caused by "namespace too small" or "namespace too big". Neither is better than the other, so python's two-level name resolution (global and local level) is the simplest one, is the better one.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to