如何捕获python线程执行中发生的异常?

如何捕获python线程执行中发生的异常?,python,django,multithreading,exception-handling,Python,Django,Multithreading,Exception Handling,基本上,当线程中发生未处理的异常时,我希望使用Djangomail\u admins接收电子邮件。目前,我有一个处理post请求的视图,它看起来是这样的: import threading # ... def post(self, request, *args, **kwargs): # Some stuff... for message in entry['messaging']: t = threading.Thread( target=s

基本上,当线程中发生未处理的异常时,我希望使用Django
mail\u admins
接收电子邮件。目前,我有一个处理post请求的视图,它看起来是这样的:

import threading
# ...
def post(self, request, *args, **kwargs):
    # Some stuff...
    for message in entry['messaging']:
         t = threading.Thread(
         target=self.local_handler,
              args=(message, page_id)
         )
         t.setDaemon(True)
         t.start()
    # Some more stuff
现在,当任何异常发生且未被处理时,它将显示在服务器日志中。大概是这样的:

Exception in thread Thread-2:
Traceback (most recent call last):
...
有没有办法通过电子邮件接收这些回溯? 在我开始使用线程之前,我一直在接收电子邮件,但现在它不再工作了

编辑:

正如@ivan miljkovic在回答一个类似的问题时所建议的那样,这个解决方案对我有效

因此,基本上我必须捕获线程函数内部的异常:

import threading
from django.core.mail import mail_admins
# ...

def local_handler(self, message, page_id):
    try:
       # do stuff
    except: # Any not handled exception will send an email with the traceback
       import traceback
       details = traceback.format_exc()
       mail_admins('Background exception happened', details)

def post(self, request, *args, **kwargs):
    # Some stuff...
    for message in entry['messaging']:
         t = threading.Thread(
         target=self.local_handler,
              args=(message, page_id)
         )
         t.setDaemon(True)
         t.start()
    # Some more stuff
试试这个

当您在线程的调用方中捕获它时,您可以像以前一样轻松地通过电子邮件发送它


很好,我将try/except放在线程的调用方,它正在发送电子邮件。你认为我应该删除这个问题,因为它看起来像一个重复的o只是编辑和添加的例子?