我有这段代码启动了一个帖子。然后等待几秒钟,然后检查是否有事件。如果它确实有事件,则该线程被取消'。否则抛出异常。
我想知道如何捕捉这个例外,因为我已经搜索了很长时间并且找不到明确的答案。
signal
首先我用Python signal.alarm
尝试了这个概念,但是当执行超过1 time.sleep(11)
时,它就完全陷入了困境(可能是一个错误)。
修改
我不想扩展现有的类,我想使用本机定义的类。
此外,我不想连续循环检查是否发生异常。我希望线程将异常传递给其父方法。因此,我的代码中的{{1}}操作
答案 0 :(得分:3)
根据我对你问题的评论而创建 尝试这样的事情。
import sys
import threading
import time
import Queue
def thread(args1, stop_event, queue_obj):
print "starting thread"
stop_event.wait(10)
if not stop_event.is_set():
try:
raise Exception("signal!")
except Exception:
queue_obj.put(sys.exc_info())
pass
try:
queue_obj = Queue.Queue()
t_stop = threading.Event()
t = threading.Thread(target=thread, args=(1, t_stop, queue_obj))
t.start()
time.sleep(11)
# normally this should not be executed
print "stopping thread!"
t_stop.set()
try:
exc = queue_obj.get(block=False)
except Queue.Empty:
pass
else:
exc_type, exc_obj, exc_trace = exc
print exc_obj
except Exception as e:
print "action took to long, bye!"
运行时,会引发异常"signal!"
,并由print exc_obj
打印。