错误显示“赋值前引用的局部变量‘time’”,但我没有使用名为time的变量

2024-09-25 10:21:12 发布

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

我试图运行一段代码,但Python告诉我local variable 'time' referenced before assignment。代码如下:

from enlace import *
from time import time
import numpy as np

imageW = "./img/transmission_receive.png"

def process_time(time, unit):
    units={"ms":1e3, "μs": 1e6, "ns":1e9}
    return units.get(unit)*time, unit

def main():
    try:
        door="COM6"
        com2 = enlace(door)

        com2.enable()
    
        start_time = time()

        img_size_b, nRx = com2.getData(4)
        img_size=int.from_bytes(img_size_b, 'big')
        rxBuffer, nRx = com2.getData(img_size)
    
        time_to_receive=time() - start_time
        time, unit=process_time(time_to_receive, 'ms')
    
        answer=nRx.to_bytes(4, 'big')
        com2.sendData(answer)
    
        with open(imageW, 'wb') as f:
            f.write(rxBuffer)
       
        print("-------------------------\nMessage sent.\n-------------------------")
        print(f"Program took {time} {unit} to receive.")
        print(f"Message received at {size/time_to_receive} bytes/s.")
    
    except Exception as e:
        print(e)
        com2.disable()
    

if __name__ == "__main__":
    main()

现在给我带来麻烦的一行是start_time = time()一行,Python对它说local variable 'time' referenced before assignment,我不理解,因为我正在创建变量start_time,它使用time库中的time()函数

Traceback (most recent call last):
  File "d:\Insper\CamFis\Projeto 2\server.py", line 46, in <module>
    main()
  File "d:\Insper\CamFis\Projeto 2\server.py", line 19, in main
    start_time = time()
UnboundLocalError: local variable 'time' referenced before assignment

Tags: toimgsizetimemainlocalunitvariable
2条回答

这可能与python如何将代码编译成字节码有关。它决定如何处理每个范围中的符号。看起来它已经决定将time作为局部变量处理,因为它后来在main()中看到了赋值。因此start_time = time()time称为尚未分配给的本地,而不是稍后被覆盖的全局

另见question

我认为您的问题在于您正在使用time.time()函数和一个名为time的变量。在python中,函数是第一类对象。表示时间。time()的处理方式与变量time类似。time.time()然后被变量time覆盖。在python控制台中尝试以下操作:

>>> from time import time
>>> time
>>> time()
>>> time = time()
>>> time
>>> time()

应通过将varibale time或import time.time()重命名为from time import time as gettime()或类似名称来修复此问题

相关问题 更多 >