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'”
这是不可能的,因为我正在分配:
a = wks3.acell('A'+str(number)).value
所以它从谷歌电子表格中获取身份证号码并检查它是否与之相等,有人可以告诉我这里哪里出错吗?
答案 0 :(得分:3)
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 是参数:
def identify(number,Id):
如果 Id 是全局变量:
def identify(number):
global Id
如果 Id 是本地变量:
def identify(number):
id = None # or some other data type
如果 Id 是来自某个类的参数:
some_class.Id
简而言之,您在初始化之前引用了Id。这是一个新手的错误,你可以在中创建一个变量,如果有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.