markolopa wrote:
<snip>
=======

arg_columns =]
for domain in self.domains:
    i =elf.get_column_index(column_names, domain.name)
    col =olumn_elements[i]
    if len(col) !=en(val_column):
        ValueError('column %s has not the same size as the value
column %s'
                   % (column_names[i], self.name))
        arg_columns.append(col)

[...]

value_dict =}
for i, val_str in enumerate(val_column):
    arg_name_row =c[i] for c in arg_columns]
    args =domain[name] for name in arg_name_row]
    value_dict[tuple(args)] =loat(val_str)
repo[self.name] =alue_dict

=======

The bug is corrected replacing the line

    args =domain[name] for name in arg_name_row]

by

    args =domain[name] for name, domain in zip(arg_name_row,
self.domains)]

so "domain" should not exist in my namespace since I have no
information associated to "domain" only to "self.domains". Python
should allow me to write safe code!

Antoher 15 minutes lost because of that Python "feature"... Is it only
me???

Yep, I think so. You're proposing a much more complex scoping rule, where if a variable already exists before entering a loop, then the loop uses that existing variable, but if not, it creates its own local one and destroys it when exiting the loop. That's the exact opposite of what function definitions do, which already makes it confusing.

I think if you had your wish, you'd find that you had more exceptions where you had to pre-declare things, than the times when you avoided the bugs you describe. I don't like languages that make me write extra stuff 100 times, to save one instance of extra debugging. If Python already required declarations, then I might buy your arguments. But it wouldn't be Python.
Thanks for your comment!
Marko


In your particular case, the compiler couldn't guess whether you used the first loop to decide which domain to use in the second loop, or whether you accidentally reused the same name without giving it a new value in the new loop. If you need to use the same name, you could always follow your loops with the del statement to invalidate the name.


DaveA

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to