点击即校验:目录/引擎状态的三段式拦截
第一性原理:错误要趁早拦
点"开始处理",如果目录不存在、引擎没启动,这些是马上能判断的错误,就该在点击时立刻拦住,返回提示,别等后台跑一段时间才炸。
三段式校验
我们_run里就是三步拦截,顺序有讲究:
def_run(self):# ① 目录合法性folder=self.folder_edit.text().strip()ifnotfolderornotos.path.isdir(folder):self.status.setText("目录无效,请重新选择")return# ② 引擎/队列是否就绪ifnotself.queue.running:self.status.setText("需先启动引擎(服务监控页)")return# ③ 入队结果反馈ifnotself.queue.submit({"p_FolderPath":folder}):self.status.setText("队列已满,请稍后重试")returnself.status.setText("已提交,处理中")三者顺序:先看输入(目录),再看运行环境(引擎),最后才是真正的动作(入队)。
每一层拦截什么
- 输入层:目录空、不是目录 → 拦。这是用户错,最快发现。
- 环境层:引擎没启动 → 拦。否则任务提交了没人处理,静默失败。
- 能力层:队列满 → 拦。能提交就提交,不能就明确反馈。
为什么拦出来是"友好错误"
每一层都给具体提示(不是笼统的"出错了"),用户和调试者都知道该干嘛。比如"需先启动引擎"直接指向服务监控页那个按钮。
一句话
能前置判断的错误,click 时就拦掉。校验顺序从输入到环境到行为,层层反馈具体原因。别把可预防的错误拖到异步后台。