# # 多线程实例3 method = [pieState] # 字典 self.thread_s1 = {} self.worker_s1 = {} for i in range(len(method)): self.thread_s1[i] = 'thread' + str(i) self.worker_s1[i] = 'worker' + str(i) for j in range(len(method)): self.thread_s1[j] = QThread() self.worker_s1[j] = Worker() self.worker_s1[j].moveToThread(self.thread_s1[j]) self.thread_s1[j].started.connect(self.worker_s1[j].run) self.worker_s1[j].finished.connect(self.thread_s1[j].quit) self.worker_s1[j].finished.connect(self.worker_s1[j].deleteLater) self.thread_s1[j].finished.connect(self.thread_s1[j].deleteLater) self.worker_s1[j].finished.connect(method[j]) # Start the thread self.thread_s1[j].start() #调用函数 # pieState() except Exception as alarm: message = QMessageBox.warning(stack1,'警告','数据库没有数据',QMessageBox.Ok)报警: return affine_transform(points, mtx) RuntimeError: In affine_transform: Invalid vertices array. 为什么没有触发try except机制
时间: 2024-02-14 20:19:19 浏览: 49
根据您提供的代码片段,我看不出来为什么try except机制没有被触发。但是,我注意到您在except语句块中使用了QMessageBox来弹出警告消息框。请确保在运行该代码的环境中,QMessageBox可以正常使用。另外,您可以在except语句块中添加一些print语句来输出异常信息,以便更好地调试问题。
相关问题
# # 多线程实例3 method = [pieState] # 字典 self.thread_s1 = {} self.worker_s1 = {} for i in range(len(method)): self.thread_s1[i] = 'thread' + str(i) self.worker_s1[i] = 'worker' + str(i) try: for j in range(len(method)): self.thread_s1[j] = QThread() self.worker_s1[j] = Worker() self.worker_s1[j].moveToThread(self.thread_s1[j]) self.thread_s1[j].started.connect(self.worker_s1[j].run) self.worker_s1[j].finished.connect(self.thread_s1[j].quit) self.worker_s1[j].finished.connect(self.worker_s1[j].deleteLater) self.thread_s1[j].finished.connect(self.thread_s1[j].deleteLater) self.worker_s1[j].finished.connect(method[j]) # Start the thread self.thread_s1[j].start() except Exception as alarm: print(str(alarm))子线程运行报警为什么没有触发try except
根据您提供的修改后的代码,可以看出您已经在try语句块中包含了整个for循环。因此,如果有任何异常在for循环中抛出,都应该被try语句块捕获并触发except语句块中的代码。如果您仍然没有触发try except机制,可能是因为您没有正确地引发异常。您可以尝试在for循环中添加一些故意触发异常的代码来测试try except机制是否正常工作。
# # 多线程实例3 method = [RTYtrend,OTDTrend,DDHTrend,PROTrend,Show_s,Show_q,Show_d,Show_i,Show_p,Show_allongoing,Show_status, s_daily,q_daily,d_daily,i_daily,p_daily] #字典 thread = [] worker = [] for i in range(len(method)): thread.append('thread' + str(i)) worker.append('worker' + str(i)) print(worker) for j in range(len(method)): self.thread[j] = QThread() self.worker[j] = Worker() self.worker[j].moveToThread(self.thread[j]) self.thread[j].started.connect(self.worker[j].run) self.worker[j].finished.connect(self.thread[j].quit) self.worker[j].finished.connect(self.worker[j].deleteLater) self.thread[j].finished.connect(self.thread[j].deleteLater) #self.worker[j].finished.connect(lambda j=j: method[j]()) # Start the thread self.thread[j].start()报警:status'builtin_function_or_method' object does not support item assignment怎么解决?
这个报警的原因是你在使用 `self.thread[j]` 和 `self.worker[j]` 时,将它们定义为列表,但是在下面的代码中,你又将它们分别赋值为 QThread 和 Worker 类的实例。所以在 `self.thread[j] = QThread()` 和 `self.worker[j] = Worker()` 的语句中,你试图将列表中的元素替换为 QThread 和 Worker 类的实例,但是 Python 中函数和方法是不支持赋值的,所以报出了该错误。
要解决这个问题,你可以将 `self.thread` 和 `self.worker` 定义为字典而不是列表,这样就可以通过键名来引用对应的 QThread 和 Worker 实例了。具体来说,你可以将 `thread = []` 和 `worker = []` 改为 `self.thread = {}` 和 `self.worker = {}`,然后将 `self.thread[j]` 和 `self.worker[j]` 改为 `self.thread[thread[j]]` 和 `self.worker[worker[j]]` 即可。
阅读全文