在 Python 中使用具有多个条件的时间时出错
Error when using time with multiple conditions in Python
问题是,变量t1
在循环内部,但我不能在外部使用它(因为它没有定义);所以程序returns "UnboundLocalError: local variable 't1' referenced before assignment"。我不知道其他方法来衡量这两个事件之间的时间,每次第一次开始时(用下面的代码自我解释)。
if status in STATUSON:
t1 = 0
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
t1 = time.time()
elif status in STATUSOFF and time.time() - t1 >= 5:
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
elif status in STATUSOFF and time.time() - t1 <= 5:
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
time.sleep(2)
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
您的问题在这里:
return statement('Ok')
t1 = time.time()
您 return 在 设置 t1
变量之前 。尝试反转这两行。
此外,当你使用 return
语句时,我猜你在一个函数中,然后你应该 return t1
变量(也许使用元组?) ,或将其设置为全局变量(不太推荐),以便能够在 main/top 函数中进行计算。
已解决:
我用pickle
解决了这个问题。它可以将 Python 个对象转换为字符流,并保存它,以便下一个循环可以随时访问此数据(下面的新代码)。
if status in STATUSON:
t1 = time.time()
with open('time.pickle', 'wb') as f:
pickle.dump(t1, f)
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
elif status in STATUSOFF:
with open('time.pickle', 'rb') as f:
t1 = pickle.load(f)
if time.time() - t1 >= 15:
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
open("time.pickle", "w").close()
return statement('Ok')
elif time.time() - t1 <= 15:
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
time.sleep(2)
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
else:
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
问题是,变量t1
在循环内部,但我不能在外部使用它(因为它没有定义);所以程序returns "UnboundLocalError: local variable 't1' referenced before assignment"。我不知道其他方法来衡量这两个事件之间的时间,每次第一次开始时(用下面的代码自我解释)。
if status in STATUSON:
t1 = 0
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
t1 = time.time()
elif status in STATUSOFF and time.time() - t1 >= 5:
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
elif status in STATUSOFF and time.time() - t1 <= 5:
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
time.sleep(2)
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
您的问题在这里:
return statement('Ok')
t1 = time.time()
您 return 在 设置 t1
变量之前 。尝试反转这两行。
此外,当你使用 return
语句时,我猜你在一个函数中,然后你应该 return t1
变量(也许使用元组?) ,或将其设置为全局变量(不太推荐),以便能够在 main/top 函数中进行计算。
已解决:
我用pickle
解决了这个问题。它可以将 Python 个对象转换为字符流,并保存它,以便下一个循环可以随时访问此数据(下面的新代码)。
if status in STATUSON:
t1 = time.time()
with open('time.pickle', 'wb') as f:
pickle.dump(t1, f)
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
elif status in STATUSOFF:
with open('time.pickle', 'rb') as f:
t1 = pickle.load(f)
if time.time() - t1 >= 15:
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
open("time.pickle", "w").close()
return statement('Ok')
elif time.time() - t1 <= 15:
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
time.sleep(2)
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')
else:
GPIO.output(17,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17,GPIO.LOW)
return statement('Ok')