【发布时间】:2012-12-28 06:34:17
【问题描述】:
可能重复:
Catch a thread’s exception in the caller thread in Python
我有一个给定的代码,并且有一个
thread.start_new_thread()
正如我刚刚在 python 文档中读到的:“当函数因未处理的异常而终止时,会打印堆栈跟踪,然后线程退出(但其他线程继续运行)。” 但是当(新)函数因异常而终止时,我也想终止主线程-因此应将异常转移到主线程。我该怎么做?
编辑: 这是我的代码的一部分:
def CaptureRegionAsync(region=SCREEN, name="Region", asyncDelay=None, subDir="de"):
if asyncDelay is None:
CaptureRegion(region, name, subDir)
else:
thread.start_new_thread(_CaptureRegionAsync, (region, name, asyncDelay, subDir))
def _CaptureRegionAsync(region, name, asyncDelay, subDir):
time.sleep(max(0, asyncDelay))
CaptureRegion(region, name, subDir)
def CaptureRegion(region=SCREEN, name="Region", subDir="de"):
...
if found:
return
else:
raise Exception(u"[warn] Screenshot has changed: %s" % filename)
CaptureRegionAsync(myregion,"name",2)
【问题讨论】:
-
对我来说似乎是另一个问题,而不是重复。如果“给定代码”是指“无法修改的第三方代码”,问题就完全不同了。
-
对不起,“给定的代码”表示不是我写的,所以我不是很熟悉——但我可以修改它。
-
那么我的第一个答案不是你的问题,猴子修补线程是个坏主意。 :-)
标签: python