如何捕获python线程执行中发生的异常?
基本上,当线程中发生未处理的异常时,我希望使用Django如何捕获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
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只是编辑和添加的例子?