Local variable referenced before assignment in Python
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
Related videos on Youtube
Or Halimi
now i am study python alone very slowly. and its not easy for me :-)
Updated on May 02, 2021Comments
-
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 almost 11 yearsthanks, 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?