gpt4 book ai didi

python - 如何捕获 python threading.Thread 执行中发生的异常?

转载 作者:行者123 更新时间:2023-12-01 03:07:42 24 4
gpt4 key购买 nike

基本上,当线程内发生未处理的异常时,我希望使用 Django mail_admins 接收电子邮件。目前,我有一个处理发布请求的 View ,它看起来像这样:

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

最佳答案

试试这个。

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

Catch a thread's exception in the caller thread in Python

关于python - 如何捕获 python threading.Thread 执行中发生的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43187991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com