我正在使用q.enqueue_call(...)
上的rq运行作业,在此作业中,我使用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
答案 0 :(得分:0)
据我所知,您不能仅获得最后一条错误消息:您可以获取堆栈跟踪或该函数返回的值。从文档here:
Python函数可能具有返回值,因此作业也可以具有它们。如果作业返回的返回值为非None,则工作人员会将返回值写回到作业的Redis哈希在结果键下。作业完成后,默认情况下,该作业的Redis哈希值本身将在500秒后过期。
exc_info包含以下内容:
当作业中引发异常时,该异常会被工人捕获,序列化并存储在作业的Redis哈希的exc_info键下。对该作业的引用被放在失败的队列中。
我发现错误消息的最好方法是获取exc_info并解析它-通常在raise
或类似的东西上-然后从拆分中获取最后一个值。这样的事情会返回上一次引发的错误:
job.__dict__["exc_info"].split("raise")[-1]
答案 1 :(得分:0)
这可能有帮助
$ redis-cli
> hget rq:job:name exc_info
"x\x9c\r..."
$ python
> import zlib
> zlib.decompress("x\x9c\r...")