Local variable referenced before assignment in Python

落爺英雄遲暮 提交于 2019-12-18 12:14:22

问题


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 got alot of string on 'stuff' and I like to find 1 lowercase letter that sorrund 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. thanks in advance


回答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.




回答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



来源:https://stackoverflow.com/questions/17506947/local-variable-referenced-before-assignment-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!