Python跨文件访问变量报错:AttributeError: module 'core temp' has no attribute 'ct'
解决你的AttributeError和游戏脚本问题
嘿,兄弟,我来帮你捋捋这几个坑!你遇到的AttributeError和后续的潜在问题主要有几个核心原因,咱们一个个拆解解决:
1. 模块加载被死循环彻底阻塞了
你的coretemp.py里写了while True的死循环,而Python导入模块时会从头到尾执行一遍模块内的所有代码——这就意味着脚本会一直卡在这个死循环里,永远没法完成模块加载流程,主脚本自然就获取不到ct变量了,这就是AttributeError的根源!
2. 全局变量的实时更新逻辑不合理
就算去掉死循环,这种用全局变量在模块里循环更新的方式也不适合游戏场景:模块加载只执行一次,循环会直接阻塞程序,而且主脚本也没法实时拿到更新后的ct值。咱们得把温度逻辑封装成可调用的结构,让主脚本能主动获取最新状态。
3. 字符串拼接的类型错误
你代码里"Core temperature: "+core.ct会触发TypeError,因为ct是整数类型,不能直接和字符串做拼接,得先转成字符串才行。
4. 条件判断的逻辑顺序有问题
第三个判断elif core.ct >= 3000放在elif core.ct < 4000后面,会导致3000-4000之间的温度永远触发不了红色警告——因为前面的<4000已经先匹配上了,逻辑顺序得调整。
修改后的coretemp.py
咱们用类+后台线程来重构温度逻辑,既不会阻塞模块加载,又能实时更新温度:
from time import sleep import coolant as c import threading class CoreTemp: def __init__(self): self.ct = 10 self.running = True # 启动后台线程专门处理温度更新 threading.Thread(target=self.update_temp, daemon=True).start() def update_temp(self): while self.running: if not c.coolactive: self.ct += 1 sleep(0.3) else: self.ct -= 1 sleep(1) # 创建一个全局实例,供主脚本直接调用 core_temp = CoreTemp()
修改后的主脚本代码
# 导入重构后的模块实例 from coretemp import core_temp as core from termcolor import colored # 假设你用的是termcolor库的colored函数 # 假设这是你的命令处理逻辑(放在游戏循环里) cmd = "temp" # 示例命令 if cmd == "temp": current_temp = core.ct temp_str = str(current_temp) if current_temp < 2000: print(colored(f"Core temperature: {temp_str}°C", "green")) elif current_temp < 3000: # 调整顺序,先判断2000-3000为黄色 print(colored(f"Core temperature: {temp_str}°C", "yellow")) else: # >=3000直接触发红色警告 print(colored(f"Core temperature: {temp_str}°C", "red"))
额外小提醒
- 确保你的模块文件名是
coretemp.py,没有空格(你报错里写的是core temp,大概率是输入笔误,但文件名一定要和导入语句统一) - 如果你的
coolant.py里也有类似的死循环逻辑,也要用同样的线程方式处理,不然还是会阻塞整个程序加载
内容的提问来源于stack exchange,提问作者MrSprinkleToes
相关产品推荐
相关产品推荐

