python捕捉线程异常_在Python的调用者线程中捕获线程的异常

小编典典

问题是thread_obj.start()立即返回。你产生的子线程在其自己的上下文中使用自己的堆栈执行。在那里发生的任何异常都在子线程的上下文中,并且在其自己的堆栈中。我现在想到的一种将此信息传达给父线程的方法是使用某种消息传递,因此你可能会对此进行研究。

尝试以下尺寸:

import sys

import threading

import Queue

class ExcThread(threading.Thread):

def __init__(self, bucket):

threading.Thread.__init__(self)

self.bucket = bucket

def run(self):

try:

raise Exception('An error occured here.')

except Exception:

self.bucket.put(sys.exc_info())

def main():

bucket = Queue.Queue()

thread_obj = ExcThread(bucket)

thread_obj.start()

while True:

try:

exc = bucket.get(block=False)

except Queue.Empty:

pass

else:

exc_type, exc_obj, exc_trace = exc

# deal with the exception

print exc_type, exc_obj

print exc_trace

thread_obj.join(0.1)

if thread_obj.isAlive():

continue

else:

break

if __name__ == '__main__':

main()

2020-02-22

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值