【发布时间】:2011-02-19 05:39:46
【问题描述】:
总的来说,我对 Python 和多线程编程非常陌生。基本上,我有一个脚本可以将文件复制到另一个位置。我希望将它放在另一个线程中,这样我就可以输出.... 以指示脚本仍在运行。
我遇到的问题是,如果无法复制文件,则会引发异常。如果在主线程中运行,则可以;但是,具有以下代码不起作用:
try:
threadClass = TheThread(param1, param2, etc.)
threadClass.start() ##### **Exception takes place here**
except:
print "Caught an exception"
在线程类本身,我尝试重新抛出异常,但它不起作用。我在这里看到有人问过类似的问题,但他们似乎都在做比我想做的更具体的事情(而且我不太了解所提供的解决方案)。我看到有人提到sys.exc_info()的用法,但我不知道在哪里或如何使用它。
编辑:线程类的代码如下:
class TheThread(threading.Thread):
def __init__(self, sourceFolder, destFolder):
threading.Thread.__init__(self)
self.sourceFolder = sourceFolder
self.destFolder = destFolder
def run(self):
try:
shul.copytree(self.sourceFolder, self.destFolder)
except:
raise
【问题讨论】:
-
您能否更深入地了解
TheThread内部发生的情况?也许是代码示例? -
当然。我将编辑上面的回复以包含一些详细信息。
-
您是否考虑过切换它,以便主线程是做事的位,而进度指示器位于生成的线程中?
-
Dan Head,您是指主线程首先产生“...”函数然后运行复制函数吗?这可以工作并避免异常问题。但是,我仍然想学习如何在 python 中正确地穿线。
-
这里有两个关键问题。 1. 线程是异步的,所以 start() 函数什么也不返回。 2. 错误在子线程中处理,而不是在主线程中。这就是为什么您不在主线程中捕获异常的原因。您需要将异常抛出到主线程。检查 ArtOfWarfare 的解决方案
标签: python multithreading exception