Python UnboundLocalError:在assignmen之前引用了局部变量“ID”

2024-09-29 21:53:27 发布

您现在位置:Python中文网/ 问答频道 /正文

Id, conf = recognizer.predict(gray[y:y+h,x:x+w]
def hour(cn):
   for z in range(9,17):  
      if now.hour == z:
         worksheet(cn, str(z)+":00")

def identify(number):
   sht = gc.open("Test")
   wks3 = sht.worksheet("NAMES")
   b = wks3.acell('B'+str(number)).value
   a = wks3.acell('A'+str(number)).value
   if(Id == a and conf<65):
     print(Id, conf)
     Id = str(b)
     Time = time.ctime()
     hour(number)
   elif(conf>64):
     print(conf)
     Id = "Unknown"

for m in range(2,100):

     identify(m)

上面的代码正用于面部识别,我复制了我觉得有必要的代码,它不是整个代码。

我正在尝试创建一个函数,我想在for循环中调用它

我做错什么了?我已经找了6个小时了,我试过的任何东西似乎都不管用。在

我收到一条消息说“UnboundLocalError:赋值之前引用了局部变量'Id'”

这是不可能的,因为我的任务是:

^{pr2}$

所以它从谷歌电子数据表中获取身份证号码,然后检查是否与之相等,有人能告诉我我哪里出错了吗?在


Tags: 代码inidnumberforifconfdef
1条回答
网友
1楼 · 发布于 2024-09-29 21:53:27
def identify(number):
   sht = gc.open("Test")
   wks3 = sht.worksheet("NAMES")
   b = wks3.acell('B'+str(number)).value
   a = wks3.acell('A'+str(number)).value
   #because you did, Id = ? 
   if(Id == a and conf<65):
     print(Id, conf)
     Id = str(b)
     Time = time.ctime()
     hour(number)
   elif(conf>64):
     print(conf)
     Id = "Unknown"

因为您这样做了,变量Id不会作为任何参数或全局/局部变量或作为参数传递给现有类。在

如果Id是参数:

^{pr2}$

如果Id是全局变量:

def identify(number):
    global Id  

如果Id是局部变量:

def identify(number):
    id = None # or some other data type  

如果Id是某个类的参数:

some_class.Id 

简而言之,你在初始化Id之前引用了它。这是一个菜鸟的错误,在某些情况下,你可以在if elif else语句中实际初始化一个变量,但你需要遵循上述规则中的任何一个逻辑。在

if True: Id = 2; elif False: Id = 3; else: Id =0 #this is pseudocode, don't paste it in.

还要记住,下一个变量也是未绑定的conf


编辑:

为了避免这个问题,我们通常编写如下代码:

def somefunction(parm1,parm2... ): 

    # global variables : description for variable stack is optional
    global var1,var2 # if needed  

    #local variables  
    var3,var4 = None;  
    var5 = 'something else'  

    #in body functions : functions inside functions or just general program functions 
    def a(... ): return ...  

    #body : actually what function/program does.   

    # returning , finishing statement.

相关问题 更多 >

    热门问题