variable is local and global
Phil Frost
indigo at bitglue.com
Sun Jul 25 22:51:26 EDT 2004
In the function make_acceptable, 'version' is both local and global
because it's a parameter, and you have used global to make it global.
Python does not allow it because what you mean by 'version' is
ambigious; it could mean the local, or the global. Rename either the
parameter or the global and it will work. Better yet, restructure your
code so that you don't need a global; either use the return value, or
make a class. Globals are never a good idea unless the cost of writing
it again is less than the cost of writing it right the first time.
On Mon, Jul 26, 2004 at 02:41:33AM +0000, Kyle Root wrote:
> I'm writing a little program that compares two versions and tells you
> whether you are upgrading, downgrading, or it's the same version.
> Unfortunately, I haven't gotten very far, in fact I'm at a dead stop.
>
> I need to make a variable in function available outside the function, so
> I used "global", however now the program won't run and gives me the not
> so friendly error:
>
> bash-2.05b$ ./version.py
> File "./version.py", line 11
> def make_acceptable(version):
> SyntaxError: name 'version' is local and global
>
> -------------------------
>
> I've looked and searched all over. Here's the code in case anyone can
> spot the problem.
>
> -------------------------
> #!/usr/bin/python
> import string
> import sys
> # This'll be replaced by an arg catching function, but for now this will
> be fine
> db_version="2.6.0"
> pkg_version="2.6.6"
> # We don't allow versions that have anything else besides digits and periods
> acceptable_chars = "1234567890."
> max_count = len(pkg_version)-1
> def make_acceptable(version):
> counter = 0
> while 1 == 1:
> one_char = version[(counter):(counter + 1)]
> if one_char in acceptable_chars:
> if counter == max_count:
> # Now we need to replace the periods with
> zeros.
> version = version.replace(".","0")
> global version
> break
> elif counter != max_count:
> counter = counter + 1
> elif one_char not in acceptable_chars:
> print "EXITING: Versions may only contain digits and
> periods"
> sys.exit()
>
> make_acceptable(db_version)
> db_version = version
> print db_version
> make_acceptable(pkg_version)
> pkg_version = version
> print pkg_version
> -----------------------
> Thanks:
> Kyle ;)
More information about the Python-list
mailing list