Local variable referenced before assignment in Python

70,234

Solution 1

Due to this line count +=1 python thinks that count is a local variable and will not search the global scope when you used if count == 3:. That's why you got that error.

Use global statement to handle that:

def three_upper(s): #check for 3 upper letter
    global count
    for i in s:

From docs:

All variable assignments in a function store the value in the local symbol table; whereas variable references first look in the local symbol table, then in the global symbol table, and then in the table of built-in names. Thus, global variables cannot be directly assigned a value within a function (unless named in a global statement), although they may be referenced.

Solution 2

It is actually better to use nonlocal in this case. Use global as sparingly as possible. More information about nonlocal here docs.python.org/3/reference/simple_stmts.html#nonlocal

Share:
70,234

Related videos on Youtube

Or Halimi
Author by

Or Halimi

now i am study python alone very slowly. and its not easy for me :-)

Updated on May 02, 2021

Comments

  • Or Halimi
    Or Halimi about 3 years
    Truel=""
    count = 0
    finle_touch=False #true after it find the first 3 upperletter
    
    # check if there is 1 lower letter after three upper letter
    def one_lower(i):
        count=0
        if i == i.lower:
            finle_touch=True
            Truel=i
    
    # check for 3 upper letter
    def three_upper(s):
        for i in s:
            if count == 3:
                if finle_touch==True:
                    break
                else:
                    one_lower(i)
            elif i == i.upper:
                count +=1
                print(count) #for debug
            else:
                count ==0
                finle_touch=False
    
    stuff="dsfsfFSfsssfSFSFFSsfssSSsSSSS......."
    three_upper(stuff)
    print(Truel)
    

    So I have a lot of string on 'stuff' and I like to find 1 lowercase letter that's surrounded by 3 uppercase letter.

    But when I run this code I get:

    Traceback (most recent call last):
      File "C:\Python33\mypy\code.py", line 1294, in <module>
        three_upper(stuff)
      File "C:\Python33\mypy\code.py", line 1280, in three_upper
        if count == 3:
    UnboundLocalError: local variable 'count' referenced before assignment
    

    I don't understand why.

  • Or Halimi
    Or Halimi almost 11 years
    thanks, i though that define the var outside of the function will solve this problem. so every time i will use global var in function i will have to define it as global?