By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,903 Members | 2,036 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,903 IT Pros & Developers. It's quick & easy.

variable is local and global

P: n/a
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 ;)
Jul 18 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
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 ;)

Jul 18 '05 #2

P: n/a
thanks, I went the route of a return value.
works fine now. :)
Jul 18 '05 #3

P: n/a

Kyle> bash-2.05b$ ./version.py
Kyle> File "./version.py", line 11
Kyle> def make_acceptable(version):
Kyle> SyntaxError: name 'version' is local and global

Change either the name of the global variable or the name of the parameter.
They can't both be named "version".

Skip
Jul 18 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.