It is indeed catching the RetryTaskError that the retry() in the try is raising in a successful retry submission.  Since I need to reraise it anyway so Celery did the right thing outside of the task, and I needed a clause to catch the retry failure (i.e. due to retry max), this seemed much cleaner than the alternative (of setting throw=False on the retry, and generating the RetryTaskError myself).