On 9 Jul 2005 05:26:46 -0700, [EMAIL PROTECTED] wrote: >Alex Gittens wrote: > >> I'm getting an UnboundLocalError > >> def fieldprint(widths,align,fields): [...] >> def cutbits(): [...] >> fields = fields[widths[i]:] > >There's your problem. You are assigning 'fields' a completely new >value. Python doesn't allow you to rebind a variable from an outer >scope in an inner scope (except for the special case where you >explicitly use the 'global' directive, which is no use for the nested >scopes you are using here). > >So when you assign an identifier in a function Python assumes that you >want that identifier to be a completely new local variable, *not* a >reference to the variable in the outer scope. By writing 'fields= ...' >in cutbits you are telling Python that fields is now a local variable >to cutbits. So when the function is entered, fields is a new variable >with no value yet, and when you first try to read it without writing to >it first you'll get an error. > >What you probably want to do is keep 'fields' pointing to the same >list, but just change the contents of the list. So replace the assign >operation with a slicing one: > > del fields[:widths[i]]
Except the OP probably had two errors in that line, and doesn't want to slice out fields from the field list, but rather slice characters from the i-th field, and strings are immutable, so he can't do del fields[i][:widths[i]] # slice deletion illegal if fields[i] is a string and so fields[i] = fields[i][:widths[i]] would be the way to go (see my other post). Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list