def from_except(cls, name, tb, exception, error_html_getter=None, error_html_getter_params={}, **data):
try:
from celery.exceptions import Retry
except ImportError:
pass
else:
if isinstance(exception, Retry):
six.reraise(Retry, exception, tb)
tb_stacks = traceback.extract_tb(tb)
stack_list = [
(cls._normalize_file_python(src_path), lineno, func_name, src_code)
for src_path, lineno, func_name, src_code in tb_stacks
]
error_html_getter = error_html_getter or (lambda exc_type, exc_value, tb, **kwargs: Reporter(exc_type, exc_value, tb).get_traceback_html())
data[cls.name_property] = name
res = cls(
stack_hash=cls._get_stack_hash(stack_list),
error_type=cls._get_except_cls_name(type(exception)),
error_html=error_html_getter(exc_type=type(exception), exc_value=exception, tb=tb, **error_html_getter_params),
**data
)
res.stack_list = stack_list
res.error_args = [repr(arg) for arg in exception.args]
return res
评论列表
文章目录