Python统计程序执行时间导入自定义模块报time未定义报错求解
错误原因
你的自定义模块(包括nod16及其依赖的其他自定义模块)中存在修改全局命名空间的操作,要么是执行了del time删除了time模块的引用,要么是通过通配符导入、定义同名变量/函数的方式覆盖了time的原有指向,才会在执行print语句时找不到time的定义。
解决方案
临时规避方案(无需修改自定义模块)
将time模块绑定到不会被覆盖的局部别名,避免后续导入操作影响计时逻辑:
# 给time模块起独有的别名,防止被后续导入覆盖 import time as _timer start_time = _timer.time() import nod16 print("--- %s seconds ---" % (_timer.time() - start_time))
或者用闭包完全隔离命名空间:
import time def runtime_timer(): start = time.time() return lambda: time.time() - start get_runtime = runtime_timer() # 后续导入操作不会影响闭包内的time引用 import nod16 print(f"--- {get_runtime()} seconds ---")
根源修复方案
如果要定位问题所在的模块,可以加调试信息逐次验证:
import time print(f"导入自定义模块前time的引用id:{id(time)}") # 逐行导入你的16个自定义模块,每次导入后打印time的状态 import nod1 print(f"导入nod1后time是否存在:{'time' in dir()}") import nod2 print(f"导入nod2后time是否存在:{'time' in dir()}") # ...依次导入到nod16
找到导致time引用失效的模块后,检查模块内是否有del time、from xxx import *、自定义名为time的变量/函数的逻辑,修改对应代码即可从根源解决问题。
内容的提问来源于stack exchange,提问作者slow_learner
相关产品推荐
相关产品推荐

