我正在使用rq与q.enqueue_call(...)
一起工作,在这项工作中我用raise Exception('URL not found')
提出异常
我想知道如何在作业失败后从此作业(“未找到URL”)获取异常消息。
我可以得到堆栈跟踪
print(get_failed_queue(connection=conn).jobs[-1].exc_info)
虽然似乎无法获得短错误消息本身。
我认为job.result
(在获得job = Job.fetch(job_key, connection=conn)
的工作后)会工作虽然这会返回None
据我所知,你不能只得到最后一条错误信息:你可以得到堆栈跟踪,或者函数返回的值。从文档here:
Python函数可能有返回值,因此作业也可以拥有它们。如果作业返回非None返回值,则worker将该返回值写回结果键下的作业的Redis哈希值。作业完成后,作业的Redis哈希本身将在500秒后失效。
exc_info包含以下内容:
当在作业中抛出异常时,它会被工作者捕获,序列化并存储在作业的Redis散列的exc_info键下。对作业的引用将放在失败的队列中。
我发现获取错误消息的最好方法是获取exc_info并解析它 - 通常在raise
或类似的东西上 - 然后从拆分中获取最后一个值。像这样的东西返回引发的最后一个错误:
job.__dict__["exc_info"].split("raise")[-1]