variable is local and global

Discussion in 'Python' started by Kyle Root, Jul 26, 2004.

  1. Kyle Root

    Kyle Root Guest

    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 ;)
    Kyle Root, Jul 26, 2004
    #1
    1. Advertising

  2. 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
    Skip Montanaro, Jul 26, 2004
    #2
    1. Advertising

  3. Kyle Root

    Phil Frost Guest

    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 ;)
    Phil Frost, Jul 26, 2004
    #3
  4. Kyle Root

    Kyle Root Guest

    thanks, I went the route of a return value.
    works fine now. :)
    Kyle Root, Jul 26, 2004
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Patrick Hoffmann
    Replies:
    3
    Views:
    2,815
    Christian Jan├čen
    Aug 8, 2003
  2. Pyenos
    Replies:
    9
    Views:
    306
    Fredrik Lundh
    Dec 23, 2006
  3. Mohanasundaram
    Replies:
    44
    Views:
    1,042
    Keith Thompson
    Aug 24, 2004
  4. Shilpa

    Accessing global variable in a local block

    Shilpa, Nov 16, 2006, in forum: C Programming
    Replies:
    9
    Views:
    327
    Chris Torek
    Nov 16, 2006
  5. sairam
    Replies:
    2
    Views:
    356
    Steve Holden
    Apr 5, 2007
Loading...

Share This Page