newbie 'Find File' question.

G. Willoughby thecalm at NOSPAM.btinternet.com
Thu Aug 2 07:17:41 EDT 2001


Thanks...

G. Willoughby

"Jeff Shannon" <jeff at ccvcorp.com> wrote in message
news:3B6831A1.D84FE33E at ccvcorp.com...
>
> "G. Willoughby" wrote:
>
> > very useful ta, maybe you could help me with a little problem, my code:
>
> [cleaning up indentation...]
>
> >
> > def go():
> >     status.set("Searching...")
> >
> >     if checkEntryField() == 1:
> >
> >     resultPane.delete(0, END) # Clear the results pane!
> >     searchString=str(entryField.get()) # Get search string
> >
> >     def search(of, dir, files):
> >         for file in files:
> >         if file == searchString:
> >             of.insert(END, os.path.join(dir, file))
> >
> >     driveList=string.split(win32api.GetLogicalDriveStrings(),'\0')[:-1]
# Get
> > Drives
> >     for x in range(0,len(driveList)):
> >         os.path.walk(driveList[x], search, resultPane)
> >     status.set("Done")
>
> I'm guessing at the correct indentation of these last few lines.
>
> > when this script is run i get this error:
> >
> > Local name 'searchString' in 'go' shadows use of 'searchString' as
global in
> > nested scope 'search' def go()
> >
>
> What's happening, is that you have a nested function (search) that is
using a
> variable defined in its parent scope.  Python's old scoping rules don't
have the
> behavior you're looking for--it looks for a value of searchString in three
> scopes--that of search(), the global scope (module level), and builtins.
> searchString is not defined at any of those levels, but it *is* defined in
> go().  If you do indeed want to use the searchString from go() within the
nested
> function search(), then you need to use Python's *new* scoping
rules--nested
> scopes.  These rules are available starting with Python 2.1, which you
obviously
> have or you wouldn't be getting that warning.  However, these rules are
not the
> default--in order to activate them, you need the first line in your script
to
> be:
>
> from __future__ import nested_scopes
>
> Then everything should run as you intend.
> Hope that helps...
>
> Jeff Shannon
> Technician/Programmer
> Credit International
>
>





More information about the Python-list mailing list