From 1df3bf133cae612c36ae8b9c09b986c033649150 Mon Sep 17 00:00:00 2001 From: John Arnold Date: Sat, 23 Jun 2018 07:12:05 +0000 Subject: [PATCH] Fix exception deserialization for unknown classes (#4835) (#4836) --- celery/backends/base.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/celery/backends/base.py b/celery/backends/base.py index 029dd58b990..eed17a2582c 100644 --- a/celery/backends/base.py +++ b/celery/backends/base.py @@ -21,6 +21,7 @@ from kombu.utils.encoding import bytes_to_str, ensure_bytes, from_utf8 from kombu.utils.url import maybe_sanitize_url +import celery.exceptions from celery import current_app, group, maybe_signature, states from celery._state import get_current_task from celery.exceptions import (ChordError, ImproperlyConfigured, @@ -249,7 +250,11 @@ def exception_to_python(self, exc): else: exc_module = from_utf8(exc_module) exc_type = from_utf8(exc['exc_type']) - cls = getattr(sys.modules[exc_module], exc_type) + try: + cls = getattr(sys.modules[exc_module], exc_type) + except KeyError: + cls = create_exception_cls(exc_type, + celery.exceptions.__name__) exc_msg = exc['exc_message'] exc = cls(*exc_msg if isinstance(exc_msg, tuple) else exc_msg) if self.serializer in EXCEPTION_ABLE_CODECS: